我设法获取某个关键字的实时推文。到目前为止,我试图添加一些RateLimitStatusListener
,以防我达到速率限制。
问题是,永远不会被调用。即使我达到了速率限制,它也不会被调用。我无法理解。 我的意图是,如果我得到速率限制错误做一些错误处理。尽管如此,有没有其他方法可以检查是否达到了速率限制?
public final class PrintSampleStream {
public static void main(String[] args) throws TwitterException {
TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
StatusListener listener = new StatusListener() {
@Override
public void onStatus(Status status) {
System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
}
@Override
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
}
@Override
public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
}
@Override
public void onScrubGeo(long userId, long upToStatusId) {
System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
}
@Override
public void onStallWarning(StallWarning warning) {
System.out.println("Got stall warning:" + warning);
}
@Override
public void onException(Exception ex) {
ex.printStackTrace();
}
};
twitterStream.addRateLimitStatusListener( new RateLimitStatusListener() {
@Override
public void onRateLimitStatus( RateLimitStatusEvent event ) {
System.out.println("Limit["+event.getRateLimitStatus().getLimit() + "], Remaining[" +event.getRateLimitStatus().getRemaining()+"]");
}
@Override
public void onRateLimitReached( RateLimitStatusEvent event ) {
System.out.println("Limit["+event.getRateLimitStatus().getLimit() + "], Remaining[" +event.getRateLimitStatus().getRemaining()+"]");
}
} );
FilterQuery filterQuery = new FilterQuery();
String[] query = {"#WorldCup2014"};
filterQuery.track(query);
twitterStream.addListener(listener);
twitterStream.filter(filterQuery);
}
}
答案 0 :(得分:4)
您提到的费率限制仅适用于Twitter rest api,而不适用于流API。在流式传输中,不需要添加类似的代码,因为限制是以不同的方式处理的:
您将以总量的1%流式传输
这意味着您将获得流式API中跟踪或关注的内容的1%。
如何在Streaming API上确定速率限制?
公共流式API会限制发送给您的邮件数量 客户到任何给定的推文总量的一小部分 时刻。
样品软管,如下所述 https://stream.twitter.com/1/statuses/sample.json,随机发送 所有推文的抽样数量等于公共流媒体上限。
过滤的流将所有匹配的推文返回到等于的卷 流媒体上限。如果有更多的推文符合你的 标准,您将流式传输速率限制消息,指示有多少 推文未送达。