Twitter APIにおけるリツイート

Twitter APIのusers/showは認証なしで手軽に最新のツイートのみを拾えるので、JavaScriptでウェブサイトにツイートを表示するなどといったケースに適しており、使っている人も多いと思う。が、最新のツイートがリツイートの場合はAPIが返すJSONからstatus以下がバッサリとなくなってしまうため、最新のツイートを拾うことができなくなってしまう。これに対処するためにもっと柔軟にツイートを拾えるstatuses/user_timelineを使ってcount=1にした……が、それだけではうまくいかなかったという話。

最新のツイートだけを拾いたかったので、単純にcount=1を指定してみた。

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=abcde&count=1

しかし、最新のツイートがリツイートだと返されるJSONが空になる(リツイートではない最新のツイートまで遡ってくれたりはしない)。つまりはusers/showと似たような挙動でこれだけではうまくいかない。空にならないようにするためには、リツイートを含めて返させるように、include_rtsパラメータも追加する必要がある。

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=abcde&count=1&include_rts=true

どうしてもusers/showでリツイートを含めて返して欲しい場合は、JSONではなくXMLで返してもらうと良い。JavaScriptで扱う場合はYQL等を経由することが多いと思うので、JSONとXMLのどちらでも大して変わらないはず。

http://api.twitter.com/1/users/show.xml?screen_name=abcde

認証なしAPIでリツイートを飛ばした最新のツイートだけをサクっと拾う方法はなさそうな感じ。リツイートが後付けの機能だからなのか、パフォーマンスの問題からなのか、この仕様は明文化されてないこととかもあって微妙に困る。