如果我将此代码运行了大约3周,Twitter Streaming API流是否会不间断运行?或者我是否需要跟踪速率限制,如果我这样做,我该怎么做?
import twitter4j.*
public class SimpleStream {
public static void main(String[] args) {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey("******");
cb.setOAuthConsumerSecret("*****");
cb.setOAuthAccessToken("********");
cb.setOAuthAccessTokenSecret("******************");
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener listener = new StatusListener() {
@Override
public void onStatus(Status status) {
User user = status.getUser();
String username = status.getUser().getScreenName();
System.out.println("Screen name: " + username);
String name = status.getUser().getName();
System.out.println("User's real name: " + name);
long user_id = status.getUser().getId();
System.out.println("Users_id: " + user_id);
}
};
twitterStream.addListener(listener);
twitterStream.sample();
}
}
答案 0 :(得分:1)
您可以添加RateLimitStatusListener以跟踪是否达到限制,
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()+"]");
}
} );
另请查看关于“费率限制”的twitter-faq部分:https://dev.twitter.com/docs/faq#6861
* 如何在Streaming API上确定速率限制?
公共流式API会将发送到您客户端的邮件数量限制在任何特定时刻推文总量的一小部分。
如https://stream.twitter.com/1/statuses/sample.json中所述,样本软管随机抽取所有推文,其音量等于公共流媒体上限。
过滤的流将所有匹配的推文返回到等于流限制的卷。如果有更多推文符合您的条件,您将会收到一条速率限制消息,表明未发送的推文数量。*