如何在Twitter4j中获取RateLimitStatus对象?

时间:2013-05-29 02:16:36

标签: java api twitter twitter4j

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

3 个答案:

答案 0 :(得分:7)

新的Twitter API的速率限制状态为 / 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")调用它。

答案 1 :(得分:5)

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());
}

答案 2 :(得分:0)

Twitter API也允许:

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

其中:

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

您可以这样检查:

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