LoginSignup
10
3

More than 5 years have passed since last update.

Twitter APIのmax_id,since_idが無限ループする問題

Posted at

結論

id_strの値をプラマイ1して設定してください

説明

ちょっと試しに携帯から投稿。全く本文が見えない。別で編集して張り付けたほうがいいですねこれ。
今回は前回紹介したサービスを作る際につまずいたTipsを載せておきます。
ファボ画像一覧サービス
QooQ Twitter Favo Photos Viewer
https://app-qooq.rhcloud.com/app-twitter/favolist

現象

TwitterAPIは1度に取得できるツイート数に上限があるため、すべてのツイートを取得するには数回にわける必要があります。
https://dev.twitter.com/rest/reference/get/favorites/list

で、そのためにはパラメーターにmax_idかsince_idを指定する必要があり、新しいほうから取得するならmax_idを指定する必要があります。
この指定をしくじると同じデータが延々返ってきて無限ループっぽい動作になります。

原因1:指定したIDを含む

このAPIは指定したID以下または以上を返します。素直に最後に取得したツイートのIDを指定すると、最終的に延々とそのツイートが返ってくるのでプラマイ1しましょう。

原因2:丸め誤差が発生する

本題はこっちです。ツイートのIDプロパティは値がでかいです。Javascriptで普通に操作すると、プラマイ1しても、結果が丸められて値が変化しません。そもそも取得した時点で誤差が発生しており、結論からいうとIDプロパティは役に立ちません。
これを回避するには、id_strプロパティを使いましょう。IDが文字列で入っています。文字列なので直接プラマイできないので適当なBig Intライブラリを使いましょう。私は https://github.com/MikeMcl/bignumber.js/blob/master/README.md このあたりを使わせて頂きました。
これで丸め誤差も発生せず、期待した通りに動作します。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3