久しぶりに、Raindrop.ioPython APIに手を入れてみた

先日から作りかけだったRaindrop.ioPython API、久しぶりに機能追加しました。Webアプリケーションなどでも使えるように、OAuth2で認証して、トークンのリフレッシュなんかもできるようになりました。

Flaskのサンプルアプリケーションはこちら

ほんらい、どってことない作業のハズで、requests-oauthlib を使ってサクッと終了する予定でした。

しかし、どうもリフレッシュがうまく動かない。requests-oauthlib の使い方は間違ってないはずなんだけど… と、Raindropが返してくるトークンを見てみても、ちゃんとデータは取れてる。トークンの有効期限を示す expires もちゃんと取得できてて、問題ないはず…

と、ここでようやく「ん? expires ?」 となんかおかしいことに気がつきました。Raindrop.io APIのドキュメント を見てみると、トークンの有効期限は expires というフィールドで返ってくることになっていますが、ふつう、OAuth2の仕様 だと expires ではなく expires_in のはずです。

なんで expires にしちゃったんだろ… と不思議に思いつつ、expiresexpires_in に書き換える処理を追加してもう一度試してみました。しかし、なんかまだうまく動きません。

んんんんん?と思いながらトークンの値をよく見てみると、expires の値がなんかでかい。でかすぎる。10桁ぐらいあります。ドキュメントによればトークンの有効期限は2週間ということなので、そんなに大きな値になるわけがない。

値を見てみると、1209599980 とか 1209599991 とか、どうも 1209600000 に近い値になるようです。そして 1209600000 を一日の秒数である 86400 で割ると、ドキュメント上の有効期限である2週間の1000倍、14000日という数字が出てきます。そう、Raindropさんは、なぜかミリ秒単位で有効期限を通知してくれてたんですね…

というわけで、無事にOAuth2(もどき)で認証してAPIを使えるようになりました。

Raindrop.ioさん、ちょっとスピードは遅いけど機能的にはけっこうお気に入りでお金払って使ってたんですが、こういうところで雑っぽさを見せられると萎えるんでしっかりしてほしい…

2020/09/05 追記

raindrop.ioさんに直して、って頼んだら直してくれました → Raindrop.io APIのドキュメント