【问题标题】:Twitter streaming api - Restricting the number of tweetsTwitter 流 api - 限制推文数量
【发布时间】:2014-07-23 20:20:49
【问题描述】:

我可以使用下面的推特流 API 获取实时推特流

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true);
    cb.setOAuthConsumerKey("xxxx");
    cb.setOAuthConsumerSecret("xxxx");
    cb.setOAuthAccessToken("xxxx");
    cb.setOAuthAccessTokenSecret("xx");
    int count = 0;
    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
    StatusListener listener = new StatusListener() {


        public void onStatus(Status status) {

            System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
           // count++;
        }


        public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
            System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
        }

        public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
            System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
        }

        public void onScrubGeo(long userId, long upToStatusId) {
            System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
        }

        public void onException(Exception ex) {
            ex.printStackTrace();
        }

        @Override
        public void onStallWarning(StallWarning arg0) {
            // TODO Auto-generated method stub

        }
    };

    FilterQuery fq = new FilterQuery();
    String keywords[] = {"samsung"};
    String lang[] = {"en"};
    fq.track(keywords);
    fq.language(lang);
    twitterStream.addListener(listener);
    twitterStream.filter(fq);   

如何限制推文的数量?上述程序无限期运行。获得所需数量的推文后如何停止程序?

【问题讨论】:

标签: twitter twitter4j twitter-streaming-api


【解决方案1】:

限制将推文存储在 LinkedBlockingQueue 中

private LinkedBlockingQueue<Status> tweets = new LinkedBlockingQueue<>(10000);

StatusListener listener = new StatusListener() {

@Override
public void onStatus(Status status) {
    tweets.add(status);
}

您可以稍后在 foreach 循环中使用 Status message = obrada.poll(); .... 或者只是创建计数器并询问常规 ArrayList 的大小——

如果 (tweets.size() >= 1000) twitterStream.shutdown(); twitterStream.cleanUp();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多