のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Twitter API Timeline解説

Sponsored Links

皆さんこんにちわ
お元気ですか?僕はTwitterに苦しめられています。

本日はTwitter APIについて。このAPI何かとめんどくさい。
通信制限はあるし、Developer Display Requirementsとかもあるし…

今回はTimelineの解説を行います。色々と使いこなすのが難しい。

まずはOption

ステータス

Parameter 動作 default
count 数は200の最新のコメントを取り出す。 20
since_id tweetidより上のタイムラインを取得 なし
max_id tweetid以下のタイムラインを取得 なし
trim_user tとするとユーザーidのみ出力 true
exclude_replies リプライを含むかどうか true
contribute_details ステータス情報にuser_id以外も含まれるようにする true
include_entities entitesを含める場合はtrue false
page ページ数 0

ここまでなら簡単だったのです。

リクエスト送ればいいだけです。だが問題があります。
https://dev.twitter.com/docs/working-with-timelines

図面は上記のアドレスをそのままお借りしました。

pageの問題

pageステータスの仕様

まずは、以下の図面を見てください。
f:id:tereka:20140301011634p:plain
新しいツイートの0tweet目から4tweet目(id:10-6)、そのまま2ページ目5tweet目から9tweet目(id:5-1)までを取得できます。

さて、この調子でpageだけずらして取得すると大問題が発生します。

ページがずれる

以下の図を見てください。
f:id:tereka:20140301011806p:plain
Processedは処理済みということです。Newは新しいtweetですね。
図のようにcount5、2ページ目を取得しようとする場合、新しいTweetを含んでの5tweet目になります。そうなると処理した部分を含んだTweetを含んでしまいます。
これは不本意です。

max_idを使う。

max_idを使うことでそれを回避することができます。以下の図を見てください。
f:id:tereka:20140301011849p:plain
page0の最後のmax_idを保存し、page1の時にmax_idにpage0のmax_parameterを入れると、このように取得できます。処理済みのtweetが必ず一つ入りますね。これは面倒。

そこで以下のように行います。
f:id:tereka:20140301013330p:plain
処理した最後のmax_idから-1を行います。するとそのid以下の内容が出てくるので上の図面のようにうまくいきます。

Since_id

今度はidとidの間を取得してみましょう。
f:id:tereka:20140301011901p:plain
max_idだけだとうまくいきませんね…そりゃそうか。
since_idと呼ばれるパラメータを組み合わせることでうまくいきます。

f:id:tereka:20140301011910p:plain

since_idを組み合わせることでsince_idより上、max_id以下を実現し、うまくidを取得することができます。