twitterのAPI制限とtwitter4jでの取得
概要
このエントリでは、twitter APIのアクセス回数制限についての情報をまとめている。まず初めに、APIの制限の種類とその回数を示す。続いて、それらの値をtwitter4jから取得する方法についてまとめる。
twitter APIのRate Limiting
Rate Limiting とは
twitterAPI制限(Rate Limiting)は、APIを利用して操作できる回数を制限する物である。
Rate Limiting | dev.twitter.com
その回数はOAuth認証状態かどうかで変化し、OAuth認証状態では350回、認証不要の場合は150回となる。OAuth有りの場合にはユーザ名とIPの組み合わせ、無しの場合にはIPから回数制限を行っている。
またツイートの投稿などにはこれとは別に、一日ごとの投稿数制限なども存在している。
Twitter Help Center
(3時間あたり125件の投稿制限があるという情報もあるが*1、公式ではそのような記述は発見できなかった)
なお、この回数はtwitter側のサーバ状態によって減る事もある*2。
Rate Limiting 確認方法
現在、Rate Limitingの確認には、二つの方法がある*3。
一つは、毎回のAPI呼び出しへの返答に含まれる、レスポンスヘッダを確認する方法である。通常、レスポンスヘッダには以下の形で、「現在の制限回数」「残りのAPI利用可能回数」「次にリセットされる時間」が含まれる。
X-RateLimit-Limit: 350 X-RateLimit-Remaining: 350 X-RateLimit-Reset: 1277485629
もう一つは、Rate Limitingを確認するAPIを呼び出す方法である。
GET account/rate_limit_status | dev.twitter.com
こちらの方法では、リセットされる時間を日付と時分秒の形式で取得できる。
このAPIは、Rate Limitingを消費することなく呼び出せるので、安心して呼んで良い。
twitter4jを通して確認する方法
レスポンスヘッダの確認
タイムライン読み込み時には、結果を ResponseList
ResponseList<Status> twitterStatuses = (ResponseList<Status>)twitter.getPublicTimeline(); //rate limitingの取得 RateLimitStatus ratelimit = twitterStatuses.getRateLimitStatus(); //現在の最大回数 int hourlylimit = ratelimit.getHourlyLimit(); //残りアクセス可能回数 int ratelimit = ratelimit.getRemainingHits(); //リセットされる時間 int resettimeinseconds = ratelimit.getResetTimeInSeconds(); //リセットされる"までの"秒数 int seconduntilreset = ratelimit.getSecondsUntilReset();
まとめ
このエントリで残した課題
Rate Limiting FAQ | dev.twitter.comを読む限りでは、検索APIの回数制限は独立に存在している事になっているのだが、それを確認する為のAPI仕様が見つけられていない。何か理解を間違っているのだろうか?
次回
未定。
今回で、twitterから情報を収集していく為の基本的な事は抑えられたと思う。投稿に関しては、エントリーにする程の事も無いので割愛する事とした(公式のTwitter4J - コード例を見ていただければ良いかと)。
とりあえずこれからは、twitter上から情報を収集して、GAE/j上にそれを蓄積するプログラムを書いていく。