Java Twitter4j-超出速率限制

Java Twitter4j-超出速率限制,java,twitter,twitter4j,Java,Twitter,Twitter4j,我想在Twitter4j中使用getFollowersIds()获得追随者,但我得到了 ConnectionErrorException。。。 超过利率上限 我看到secondsUntilReset=904。我运行代码1小时后,得到相同的错误消息。我不知道为什么。感谢您的帮助。Twitter API中有速率限制。每15分钟调用给定Twitter API端点的次数不能超过给定的次数(无论是否代表AuthEncaped用户) 发生在您身上的情况是,您的代码必须很快达到速率限制(对于给定的经过身份验证

我想在Twitter4j中使用
getFollowersIds()
获得追随者,但我得到了

ConnectionErrorException。。。 超过利率上限


我看到
secondsUntilReset=904
。我运行代码1小时后,得到相同的错误消息。我不知道为什么。感谢您的帮助。

Twitter API中有速率限制。每15分钟调用给定Twitter API端点的次数不能超过给定的次数(无论是否代表AuthEncaped用户)

发生在您身上的情况是,您的代码必须很快达到速率限制(对于给定的经过身份验证的用户,限制为每15分钟15次调用),因此您必须等待(904秒),然后重试

要小心您正在调用的Twitter API端点(通过Twitter4J),以节省API调用,从而避免达到速率限制

有关更多信息,请查看上的资源,特别是:

  • (关于Twitter API中的速率限制的一般主题)
  • (每个端点的速率限制)
  • (这向您解释了什么是您的“
    88
    ”响应代码)

    • 您不必等待解决利率限制问题。如果您有许多对应不同twitter帐户的令牌,那么您可以续订当前使用的令牌,对吗。想想大局。假设在一个列表或数组对象中有25个不同的帐户(令牌),并且每次遇到利率限制问题时都会得到其中一个帐户(令牌)。然后,当您到达列表令牌列表中的最后一项时,您可以用这25个令牌帐户重新填充此列表,对吗。美妙之处在于,如果您有足够数量的帐户(代币),每个重新填充循环,系统将自动等待恢复使用过的帐户,因此您不必担心利率限制,您的应用程序也不会因为利率限制问题而停止。我已经在我的项目中实现了这个机制,它工作得非常完美。
      这是唯一的最佳解决方案。

      这是twitter的问题,而不是Twitter4J的问题。Twitter4J只是调用TwitterAPI。您使用的twitter帐户是否已被列入黑名单?它被禁止了吗?也许Twitter已经停止为你提供太多电话的数据了?该帐户没有被列入黑名单或被禁止。有没有可能twitter已经停止向我提供数据超过一天了?我知道twitter API有限制,但我不明白为什么我在一小时后收到相同的错误消息,而与此同时我没有使用twitter API服务。你的
      用户列表中有多少用户?正如我在回答中所说,您每15分钟只能发出15个请求来检索追随者ID。因此,如果您的
      用户
      列表至少有16个用户(15+1),则第16个成员将在15分钟内向
      获取关注者/id
      端点发出第16个请求。twitterapi将响应429,并引发异常。每次执行代码时都会出现这种情况(当然,如果
      用户
      列表有>15个成员),即使是在上次执行一小时后。我在列表中只有一个用户。正如您在示例中看到的“TechCrunch”,我认为您不理解代码的真正功能。首先,它在Twitter上搜索“
      TechCrunch
      ”用户。然后它检索追随者ID以及每个追随者ID的贡献者。而且看起来你的研究给你的回报远远不止一个用户。我在网络界面()上做了研究,它让我得到了比要求更多的用户达到费率限制:@TechCrunch(当然!)、@TCFR、@TechCrunchOnion、@TechCrunchTV、@RSS_TechCrunch、@TechCrunchItaly、@TechCrunchIndia、@TC_Europe、@alexia……这些链接现在已经改变,下面是更新的:费率限制:,响应代码:嘿,伙计,在循环期间如何检查429 TwitterException,然后更改twitter对象的令牌?实际上,我正在检查错误消息是否包含“超出速率限制”。如果包含,我将续订当前令牌。这是当时我唯一使用的方法。也许,现在twitter4J有了一个机制。我不知道。@MehmetGokhanBAKAL你还在这里吗?我有一个问题。当然,你可以问你的问题。你上面提到的解决方案对于使用该应用程序的单个用户来说是有意义的。但如果有10000名用户同时使用该应用程序呢?只有25个账户(代币)是不可处理的,对吗?
      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