我正在尝试使用twitter4j api从twitter 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 api支持的调用限制。如何才能创建间隔以便等到可以从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
答案 0 :(得分:3)
在每个回复中,您都可以致电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);
在您现在提供的代码中,您正在拨打2个电话,showUser
和getUserTimeLine
。您需要在这两次调用后检查速率限制状态(User
和ResponseList
都延长TwitterResponse
并具有速率限制信息)。这些调用属于2个不同的资源系列(users
和statuses
),这两种方法都允许在每个速率限制窗口(15分钟)内调用180次。
答案 1 :(得分:1)
我遇到了同样的错误,升级到最新版本的twitter4j 3.0.5解决了我的问题。在这里获取最新信息http://twitter4j.org/en/index.html#download我应该提到我运行的版本是twitter4j 3.0.3。因此,通过转到3.0.5或3.0.6修复了我的问题。