前回、70行ものPHPコードを書いたにも関わらず、それだけでは、「切れ目なく」ユーザータイムラインのつぶやきを追加することはできませんでした。なぜなら、エンドポイントにアクセスしたときに使った引数のうち、since_idに独特のクセがあるからです。
since_idの日本語訳
TwitterAPIのドキュメンテーションで、GET statuses/user_timelineのParametersを読むと、since_idについてこのように書かれています。
Returns results with an ID greater than (that is, more recent than) the specified ID.
そのまま何も考えずに日本語訳すると、「(引数として)指定したIDより上のIDをもつ結果(ツイート)を返す」と読めてしまいます。
前提となるPHPのコード
例えば、ステータスID39を基準として、ツイートを3件取得することにしましょう。そのときのコードは、こんな感じになります。
(さらに詳しいコードはこちら)
[php]
$request = $twObj->OAuthRequest(‘https://api.twitter.com/1.1/statuses/user_timeline.json’,’GET’,
array(
‘count’=>’3’,
‘screen_name’ => ‘echizenya_yota’,
‘since_id’ => ’39’,
));
[/php]
ちなみにTwitterのステータスIDは、イメージ画像の通り、連番になりません。
指定したIDより上でかつ最新のツイート
ステータスIDが78であるツイートまで、新しく5つのツイートされたとしましょう。
ドキュメンテーションの内容を考慮すると、上の画像のようになります。ステータスIDが39より上のつぶやきで、67、59、44が取得できるように思います。
しかし、実際に取得できるイメージは、こちらの画像です。ステータスIDが39より上のつぶやきで、かつ最新の78、70、67を取得することになります。59と44は取得できず、タイムラインに切れ目が発生します。
つまり、”Returns results with an ID greater than the specified ID. “というのは、「指定したツイート」を返すのではなく、「指定したツイートより上でかつ最新のツイート」が返すことになります(読めなかったのは私の英語力が低かったのかもしれませんが)
この考えに基づくと、もし2件しかつぶやていないときに3件取得すると、59、44、39のツイートを取得することになります。ここでは、39が重複します。
取得する数 = 引数の値 → きれにとれる
ただし、取得する数が引数の値と一致する場合は、切れ目なく、重複することもなくツイートを取得することができます。
連続したきれいなタイムラインをデータベースに追加するためには、この性質を応用します。それは次回のブログで説明しましょう。
なお、今回のブログで使用したスプレッドシートはこちらです。
〔参考サイト〕