先日から作りかけだったRaindrop.ioのPython API、久しぶりに機能追加しました。Webアプリケーションなどでも使えるように、OAuth2で認証して、トークンのリフレッシュなんかもできるようになりました。
Flaskのサンプルアプリケーションはこちら
ほんらい、どってことない作業のハズで、requests-oauthlib を使ってサクッと終了する予定でした。
しかし、どうもリフレッシュがうまく動かない。requests-oauthlib
の使い方は間違ってないはずなんだけど… と、Raindropが返してくるトークンを見てみても、ちゃんとデータは取れてる。トークンの有効期限を示す expires
もちゃんと取得できてて、問題ないはず…
と、ここでようやく「ん? expires
?」 となんかおかしいことに気がつきました。Raindrop.io APIのドキュメント を見てみると、トークンの有効期限は expires
というフィールドで返ってくることになっていますが、ふつう、OAuth2の仕様 だと expires
ではなく expires_in
のはずです。
なんで expires
にしちゃったんだろ… と不思議に思いつつ、expires
を expires_in
に書き換える処理を追加してもう一度試してみました。しかし、なんかまだうまく動きません。
んんんんん?と思いながらトークンの値をよく見てみると、expires
の値がなんかでかい。でかすぎる。10桁ぐらいあります。ドキュメントによればトークンの有効期限は2週間ということなので、そんなに大きな値になるわけがない。
値を見てみると、1209599980
とか 1209599991
とか、どうも 1209600000
に近い値になるようです。そして 1209600000
を一日の秒数である 86400
で割ると、ドキュメント上の有効期限である2週間の1000倍、14000日という数字が出てきます。そう、Raindropさんは、なぜかミリ秒単位で有効期限を通知してくれてたんですね…
というわけで、無事にOAuth2(もどき)で認証してAPIを使えるようになりました。
Raindrop.ioさん、ちょっとスピードは遅いけど機能的にはけっこうお気に入りでお金払って使ってたんですが、こういうところで雑っぽさを見せられると萎えるんでしっかりしてほしい…
raindrop.ioさんに直して、って頼んだら直してくれました → Raindrop.io APIのドキュメント
Copyright © 2020 Atsuo Ishimoto
Powered by miyadaiku