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には、Rate Limitingを確認する為のメソッドが用意されている。これを利用する事で、以下の様に残り回数を取得できる。

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_limit_status APIの呼び出し

 専用API呼び出しは、TwitterクラスのgetRateLimitStatusソメッドを利用する。

RateLimitStatus ratelimit = twitter.getRateLimitStatus();

まとめ

  • twitterでは、APIを呼び出せる回数を n回/h に制限している
  • 制限回数の取得は2種類の方法で行える
    • 毎回の応答のヘッダ情報から得る
    • 確認専用APIを利用する
  • twitter4jは、上記二つの方法両方に対応している

このエントリで残した課題

 Rate Limiting FAQ | dev.twitter.comを読む限りでは、検索APIの回数制限は独立に存在している事になっているのだが、それを確認する為のAPI仕様が見つけられていない。何か理解を間違っているのだろうか?

次回

 未定。
 今回で、twitterから情報を収集していく為の基本的な事は抑えられたと思う。投稿に関しては、エントリーにする程の事も無いので割愛する事とした(公式のTwitter4J - コード例を見ていただければ良いかと)。
 とりあえずこれからは、twitter上から情報を収集して、GAE/j上にそれを蓄積するプログラムを書いていく。