2017-06-18 31 views
0

私はnumber = 50000つぶやきでいくつかのつぶやきを取得するコードを実行しましたが、それらのいくつかを取得した後、私はこのエラーが発生しました。私はそれを取得していないものを除いソリューションせずに、いくつかの同様の記事を見つけた私は、エラーメッセージに、以下のリンクを見直し何でも、エラーのレート制限を超えました

[WARNING] 
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 

Relevant discussions can be found on the Internet at: 
http://www.google.co.jp/search?q=d35baff5 or 
http://www.google.co.jp/search?q=12c94134 
TwitterException{exceptionCode=[d35baff5-12c94134], statusCode=429, 
message=Rate limit exceeded, code=88, retryAfter=-1, 
rateLimitStatus=RateLimitStatusJSONImpl{remaining=0, limit=180, 
resetTimeInSeconds=1497756414, secondsUntilReset=148}, version=3.0.3} 
at 
twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177) 

パート2

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven- 
plugin:1.6.0:java (default-cli) An exception occured while executing the Java class. 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) 
[ERROR] message - Rate limit exceeded 

を助けを得ることができませんでしたよく私は私の評判のためにコメントを書くことができません!

+1

[Twitter4j - レート制限を超過しました](https://stackoverflow.com/questions/19999779/twitter4j-rate-limit-exceeded) – MWiesner

+0

の重複の可能性リンクの私の評判のためコメントできませんあなたは私の投稿を書いたので、解決策はうまくいきませんでした。もしあなたが助けてもらえますか? – prog

+0

15分ごとに900のつぶやきを得ることができ、それはAPIの制限です。あなたが本当に50,000のつぶやきをロードしたい場合は、840分= 14時間かかるでしょう。 – shiftpsh

答えて

1

twitter4jRateLimitStatusオブジェクトがあります。いくつかのAPIコールの後でこのオブジェクトにアクセスすることができます。たとえば:

User user = twitter.showUser(userId); 
user.getRateLimitStatus(); 
//OR 
IDs followerIDs = twitter.getFollowersIDs(user.getScreenName(), -1); 
followerIDs.getRateLimitStatus(); 
//OR 
QueryResult result = twitter.search(query); 
result.getRateLimitStatus(); 

そして多分あなたは、このようなレートリミット処理するための機能を使用することができます。

private void handleRateLimit(RateLimitStatus rateLimitStatus) { 
    //throws NPE here sometimes so I guess it is because rateLimitStatus can be null and add this condition 
    if (rateLimitStatus != null) { 
     int remaining = rateLimitStatus.getRemaining(); 
     int resetTime = rateLimitStatus.getSecondsUntilReset(); 
     int sleep = 0; 
     if (remaining == 0) { 
      sleep = resetTime + 1; //adding 1 more seconds 
     } else { 
      sleep = (resetTime/remaining) + 1; //adding 1 more seconds 
     } 

     try { 
      Thread.sleep(sleep * 1000 > 0 ? sleep * 1000 : 0); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

または多分これを:

private void handleRateLimit(RateLimitStatus rateLimitStatus) { 
    int remaining = rateLimitStatus.getRemaining(); 
    if (remaining == 0) { 
     int resetTime = rateLimitStatus.getSecondsUntilReset() + 5; 
     int sleep = (resetTime * 1000); 
     try { 
      Thread.sleep(sleep > 0 ? sleep : 0); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

は、この情報がお役に立てば幸いです。

他の/より良い方法も認められるであろう。

関連する問題