计算来自Twitter流的过滤状态数量的最简单方法是什么?我知道我可以使用FilterQuery过滤状态,如下所示:
FilterQuery fq = new FilterQuery();
String[] array = { "twitter" };
fq.track(array);
twitterStream.filter(fq);
但是我怎么能算出包含twitter这个词的状态数量呢?我已经尝试了许多不同的方式,这些方式几乎都失败了,只会导致所有状态出现。我甚至试图解析json来过滤"文本"部分是为了计算,但它变得太混乱而且无法工作。
答案 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的状态的实时视图(尽管是样本),因此当你停止处理流时,你将错过在你停止直到你开始之间发送的任何状态。再次处理。
我希望有所帮助。