我正在尝试使用twitter4j检索twitter4j api中的数据。经过一段时间的检索数据后,我得到了以下错误:
Exception in thread "main" 403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - User has been suspended.
code - 63我得出的结论是,上述错误导致了twitter支持的调用的限制。如何创建间隔以等待从twitter获取数据的可能性?
例如,我的代码如下:
Long l = Long.parseLong(list.get(index));
TwitterResponse response = twitter.getFollowersIDs(l);
RateLimitStatus status = response.getRateLimitStatus();
if (status.getRemaining() < 2) {
try {
System.out.println("status.getSecondsUntilReset()");
Thread.sleep(status.getSecondsUntilReset());
} catch (InterruptedException e) {
System.out.println(e);
}
}
User user = twitter.showUser((l));
//statuses = twitter.getUserTimeline(l);
JSONObject features = new JSONObject();
features.put("_id", l);
score = kloutScore(l);我的新代码包含一个if语句,它检查status.getRemaining()是否接近于零,然后等待15分钟,这实际上是有限的持续时间。然而,我在TwitterResponse response =twitter.getFollowerIDs(L)方面遇到了问题;我得到了消息:
Exception in thread "main" 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发布于 2014-05-08 10:43:09
在每个响应上,您都可以调用getRateLimitStatus()来获得一个RateLimitStatus。RateLimitStats.getRemaining()将告诉您该系列调用可用的API请求的剩余数量,如果达到零,则可以调用RateLimitStatus.getSecondsUntilReset(),并且至少要等很长时间才能进行额外的调用。
有关Twitters速率限制的信息可以在这里找到:https://dev.twitter.com/docs/rate-limiting/1.1
下面是一个基本的例子:
do {
TwitterResponse response = twitter.getFollowersIDs(userId, cursor);
RateLimitStatus status = response.getRateLimitStatus();
if(status.getRemaining() == 0) {
try {
Thread.sleep(status.getSecondsUntilReset() * 1000);
}
catch(InterruptedException e) {
// ...
}
}
} while(cursor > 0);在您现在提供的代码中,您正在对Twitter、showUser和getUserTimeLine进行2次调用。在这两个调用之后,您需要检查利率限制状态( User和ResponseList都扩展了TwitterResponse,并具有利率限制信息)。这些调用属于两个不同的资源家族(users和statuses),这两种方法都允许在每个速率限制窗口(15分钟)调用180次。
发布于 2014-08-23 04:31:57
我也犯了同样的错误,并升级到twitter4j 3.0.5的最新版本,解决了我的问题。获取最新的http://twitter4j.org/en/index.html#download,我应该提到,我正在运行的版本是twitter4j 3.0.3。因此,通过使用版本3.0.5或3.0.6解决了我的问题。
https://stackoverflow.com/questions/23536721
复制相似问题