【问题标题】:How do I get a RateLimitStatus object in Twitter4j?如何在 Twitter4j 中获取 RateLimitStatus 对象?
【发布时间】:2013-05-24 03:46:14
【问题描述】:

我正在尝试创建一个方法public void limit() 来检查速率限制并休眠多久,如果它受到速率限制,则直到重置。但是,我无法弄清楚如何制作 RateLimitStatus。我努力了: RateLimitStatus status = twitter.getRateLimitStatus(); 但它实际上并没有返回 RateLimitStatus ......坦率地说,我不确定那是什么意思。无论如何,如果有人知道如何获得 RateLimitStatus,他们的帮助将不胜感激,因为目前我的项目可能由于速率限制而崩溃,我想改变这一点。 提前致谢!

【问题讨论】:

    标签: java api twitter twitter4j


    【解决方案1】:

    新的 Twitter API 有一个速率限制状态 per resource “family”,所以 twitter.getRateLimitStatus() 返回家庭/端点和速率限制状态之间的映射,例如:

    RateLimitStatus status = twitter.getRateLimitStatus().get("/users/search");
    
    // Better: specify the family
    RateLimitStatus status2 = twitter.getRateLimitStatus("users").get("/users/search");
    

    因此,您可以编写一个方法public void limit(String endpoint),用于检查正确的速率限制状态。

    public void limit(String endpoint) {
      String family = endpoint.split("/", 3)[1];
      RateLimitStatus status = twitter.getRateLimitStatus(family).get(endpoint);
      // do what you want…
    }
    

    然后您将使用.limit("/users/search") 调用它。

    【讨论】:

    • /search/tweets 的费率是否适用于流媒体 API?
    【解决方案2】:
    Map<String ,RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus();
    for (String endpoint : rateLimitStatus.keySet()) {
        RateLimitStatus status = rateLimitStatus.get(endpoint);
        System.out.println("Endpoint: " + endpoint);
        System.out.println(" Limit: " + status.getLimit());
        System.out.println(" Remaining: " + status.getRemaining());
        System.out.println(" ResetTimeInSeconds: " + status.getResetTimeInSeconds());
        System.out.println(" SecondsUntilReset: " + status.getSecondsUntilReset());
    }
    

    【讨论】:

      【解决方案3】:

      Twitter API 还允许:

      Log.d("TwitterActivity", "Limit:" + mTwitter.getFavorites().getRateLimitStatus().getLimit());
      

      地点:

      • mTwitter 是你的 Twitter 对象
      • getFavorites() 可以替换为 Twitter4j 为 Twitter 对象提供的任何其他函数
      • getLimit() 只是您可以选择的各种选项之一

      你可以这样检查:

      if(mTwitter.getFavorites().getRateLimitStatus().getLimit() <= 0){
          //do something
      }
      

      【讨论】:

        猜你喜欢
        • 2019-07-12
        • 1970-01-01
        • 2012-05-24
        • 2018-12-28
        • 2012-06-15
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多