Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Twitter APIのRate Limit Exceedエラー(code – 88)の意味について

投稿日:

 

<目次>

(1) Twitter APIのRate Limit Exceedエラー(code – 88)の意味について
 (1-1) APIコールのリミット(Rate Limit)について
 (1-2) RateLimitのモニタリングについて
 (1-3) Rate Limit Exceedエラー(code – 88)の対策について

(1) Twitter APIのRate Limit Exceedエラー(code – 88)の意味について

Twitter APIを使っていると、多くの方は次のエラーメッセージに遭遇した事があるのでは?と思います。本記事ではこのエラーの内容や原因についてご紹介致します(対処方法は下記の別記事をご参照ください)。

(参考)Rate Limit Exceedエラー(code – 88)を回避するための簡易的な対策について

(エラーメッセージ)

429:Returned in API v1.1 when a request cannot be served due to the application's rate limit having been exhausted for the resource. See Rate Limiting in API v1.1.(https://dev.twitter.com/docs/rate-limiting/1.1)
message - Rate limit exceeded
code - 88

(図111)

(1-1) APIコールのリミット(Rate Limit)について

Twitter APIの各APIエンドポイントには、混雑緩和のための「Rate Limit」があり、直近の15分枠でコールできるAPIの回数をエンドポイント毎に設定しています。
 
 
例えば、フォロワーの情報を取得する「GET followers/list」の場合、「Requests / window per user」の値が15になっているので、直近の15分枠で15回しかエンドポイントをコールできない、といったイメージになります。なので、もし15分枠の間に15回のコールを使い切った場合は、最大で15分待てば枠が全回復するイメージになります。
 
そしてTwitter4jのようなライブラリを使用してTwitterのAPIを使用する場合、最初は「Twitter4jのメソッドの名前」と「コールされるエンドポイントの名前」が紐づきにくいかも知れないので、いくつかの主要なエンドポイントについて、その情報を紐づけした一覧を掲載します(※すみません、一部?の箇所があります)
 
(表)
区分 Twitter4jメソッド名 コールするAPI名 リクエスト数上限/15分 標準件数/ページ 最大件数/ページ クエリ可能件数/15分
共通 showUser GET users/:id 900 1 1 900
ツイート検索 search GET search/tweets 180 ヒットした数による 180
ツイート検索 searchUsers GET users/search 900 20 900
ツイート検索 getUserTimeline GET statuses/user_timeline 900 20 20 900
フォロワー系 getFollowersList GET followers/list 15 20 200 3000
フォロワー系 getFollowersIDs GET followers/ids 15 5000 75000
フォロー系 getFriendsList GET friends/list 15 20 200 3000
フォロー系 getFriendsIDs GET friends/ids 15 5000 75000
リツイート者一覧 getRetweets GET statuses/retweets/:id 75 100 100 7500
リツイートID一覧 getRetweeterIDs GET statuses/retweeters/ids 75 200 15000

目次にもどる

(1-2) RateLimitのモニタリングについて

Twitter4jのライブラリを使われている場合の例となり恐縮ですが、RateLimitの状況をモニタリングするためのメソッドも用意されており、比較的簡単に状況を監視する事ができます。
 
まず、全エンドポイントの状況を知るためにTwitter4jの「getRateLimitStatus」メソッドを用いると、RateLimitStatusのMapを返却してくれます。
 
ratelimits = [Twitter型インスタンス].getRateLimitStatus();

返却されるデータは次のようなイメージです↓。

⇒(参考)返却データイメージ

あとは、このMapの各キーをループするなりして、欲しいエンドポイントの情報を抜き出す事で、現在の状況をリアルタイムに把握する事ができます。以下はそのコードのイメージです。

//# RateLimit情報をMapに格納
Map<String,RateLimitStatus> ratelimits = new TreeMap<>();
ratelimits = [Twitter型インスタンス].getRateLimitStatus();
//# 探したいエンドポイントの残数を取得していく
for(String endpoint : ratelimits.keySet()) {
    if(endpoint.equals(RoutingTable.ep_showUser)) {                             
        RateLimitStatus status = ratelimits.get(endpoint);
        remain_showuser = status.getRemaining();
        total_showuser = status.getLimit();

    }else if(endpoint.equals(RoutingTable.ep_search)) {                         
        RateLimitStatus status = ratelimits.get(endpoint);
        remain_search = status.getRemaining();
        total_search = status.getLimit();
    }else if・・・
	//~エンドポイントの数だけ続く~

目次にもどる

(1-3) Rate Limit Exceedエラー(code – 88)の対策について

別記事にてご紹介していますので、もし良ければご参照ください。
 
 

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

オープンアドレス法のアルゴリズムについて図を使ってご紹介

<目次> (1) オープンアドレス法のアルゴリズムについて図を使ってご紹介  (1-1) オープンアドレス法とは?  (1-2) オープンアドレス法のアルゴリズム  (1-3) オープンアドレス法の利 …

Javaでファイル読み込みを行う方法+サンプルプログラムもご紹介

<目次> (1) Javaでファイル読み込み&書き込みを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) Javaでファイル読み込み&書き込みを行う方法 (1-1) 構文 (構文 …

Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い

<目次> (1) Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い  (1-1) フォワード(forward)とは?  (1-2) リダイレク …

GitHubのWebAPIをコールしてユーザー情報を取得するサンプルプログラムの解説+エラー対応も2例紹介

(0)目次&概説 (1) 目的  (1-1) 記事の目的 (2) APIの概要  (2-1) APIとは?  (2-2) Web APIとは?  (2-3) Web APIの様々な呼び方   (2-3 …

JavaのServletでフォーム認証(Form認証)をカスタム実装する方法

<目次> (1) JavaのServletでフォーム認証(Form認証)をカスタム実装する方法  (1-1) フォーム認証の概要  (1-2) フォーム認証をカスタムする際のポイント  (1-3) 構 …

  • English (United States)
  • 日本語
Top