我想在Twitter4j中使用getFollowersIds()
的关注者,但我得到了
ConnectionErrorException ... 超出限额
public static void main(String[] args) {
try {
Twitter twitter = TwitterFactory.getSingleton();
String[] srch = new String[]{"TechCrunch"};
ResponseList<User> users = twitter.lookupUsers(srch);
for (User user : users) {
UserHarvest us = new UserHarvest(6017542);
us.getFollowersIds();
try {
us.getContributors();
} catch (ConnectionErrorException ex) {
Logger.getLogger(UserHarvest.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (TwitterException ex) {
Logger.getLogger(UserHarvest.class.getName()).log(Level.SEVERE, null, ex);
}
}
错误讯息:
Exception in thread "main" harvest.twitterharvest.ConnectionErrorException: Connection could not have been established
at harvest.twitterharvest.WrapperTwitter4J.getFollowersIDs(WrapperTwitter4J.java:75)
at harvest.twitterharvest.UserHarvest.getFollowersIds(UserHarvest.java:106)
at harvest.twitterharvest.UserHarvest.main(UserHarvest.java:140)
Caused by: 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=92c30ec6 or
http://www.google.co.jp/search?q=19e1da11
TwitterException{exceptionCode=[92c30ec6-19e1da11], statusCode=429, message=Rate limit exceeded, code=88, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=0, limit=15, resetTimeInSeconds=1384512813, secondsUntilReset=904}, version=3.0.4}
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:162)
at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:89)
at twitter4j.TwitterImpl.get(TwitterImpl.java:1894)
at twitter4j.TwitterImpl.getFollowersIDs(TwitterImpl.java:409)
at harvest.twitterharvest.WrapperTwitter4J.getFollowersIDs(WrapperTwitter4J.java:73)
... 2 more
我看到secondsUntilReset=904
。我在1小时后运行代码并得到相同的错误消息。我不知道为什么。谢谢你的帮助。
答案 0 :(得分:9)
Twitter API中有速率限制。您不能每15分钟拨打一次给定的Twitter API端点(代表未经授权的用户)。
您遇到的问题是您的代码必须非常快速地达到速率限制(对于给定的经过身份验证的用户,the endpoint to retrieve followers IDs限制为每15分钟15次调用),因此您必须等待(904秒)再试一次。
请注意您正在调用的Twitter API端点(通过Twitter4J),以节省您的API调用,从而避免达到速率限制。
有关更多信息,请查看Twitter Developers上的这些资源,尤其是its documentation:
88
”响应代码。答案 1 :(得分:3)
你不必等待修正利率限制问题。如果您有许多令牌对应不同的Twitter帐户,那么您可以更新当前使用的令牌。想想大局。假设您在列表或数组对象中有25个不同的帐户(令牌),并且每次有速率限制问题时,您将获得其中一个帐户(令牌)。然后,当您到达列表标记列表中的最后一项时,您可以使用这25个令牌帐户重新填充此列表。美丽就是这样,如果你有足够多的账户(代币),每个补货循环,系统会自动等待恢复使用过的账户,所以你不必担心速率限制,你的申请永远不会停止因为速率限制问题。我已经在我的项目中实现了这个机制,它完美无缺。 这是唯一最好的解决方案。