计算来自Twitter的过滤状态

时间:2014-07-03 03:56:29

标签: java twitter4j

计算来自Twitter流的过滤状态数量的最简单方法是什么?我知道我可以使用FilterQuery过滤状态,如下所示:

FilterQuery fq = new FilterQuery();
    String[] array = { "twitter" };
    fq.track(array);

    twitterStream.filter(fq);

但是我怎么能算出包含twitter这个词的状态数量呢?我已经尝试了许多不同的方式,这些方式几乎都失败了,只会导致所有状态出现。我甚至试图解析json来过滤"文本"部分是为了计算,但它变得太混乱而且无法工作。

1 个答案:

答案 0 :(得分:0)

由于您已经过滤了包含“twitter”的状态,因此您只需在StatusListener#onStatus(Status)方法中增加count,例如:

final AtomicInteger count = new AtomicInteger();

StatusListener listener = new StatusListener() {
    @Override
    public void onStatus(Status status) {
        count.getAndIncrement();
    }

    // omitted...
}

twitterStream.addListener(listener);
twitterStream.filter(fq);

// wait (to allow statuses to be received) then halt the steam...

System.out.println("received " + count.get() + "statuses in total");

或者,您可以创建一个CountingStatusListener,在您完成流处理后为您提供计数。

关于你的评论:

  

例如,我想运行流媒体并让它告诉我,自我运行流媒体以来,有7条推文或其中含有我过滤词的任何内容。

你可能已经知道了这一点,但是streaming-api提供了流经Twitter的状态的实时视图(尽管是样本),因此当你停止处理流时,你将错过在你停止直到你开始之间发送的任何状态。再次处理。

我希望有所帮助。