0

如果我让这段代码运行大约 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();


    }
  }
4

1 回答 1

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中所述,以等于公共流媒体上限的音量提供所有推文的随机采样。

过滤后的流将返回所有匹配的推文,最大音量等于流上限。如果有更多推文符合您的条件,您将收到一条速率限制消息,指示有多少推文未发送。*

于 2013-10-23T14:26:08.407 回答