我一直试图通过Streaming API抓取Twitter,并通过keywords / hashtags / users过滤检索到的推文。
以下是使用HBC的示例(虽然Twitter4J也出现同样的问题):
// After connection:
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>(10000);
StatusesFilterEndpoint filterQuery = new StatusesFilterEndpoint();
filterQuery.followings(myListOfUserIDs);
filterQuery.trackTerms(myListOfKeywordsAndHashtags);
final ExecutorService executor = Executors.newFixedThreadPool(4);
Runnable tweetAnalyzer = defineRunnable(queue);
for (int i = 0; i < NUM_THREADS; i++)
executor.execute(tweetAnalyzer);
返回分析器tweetAnalyzer
的位置:
private Runnable defineRunnable(final BlockingQueue<String> queue) {
return new Runnable() {
@Override
public void run() {
while (true)
try {
System.out.println(queue.take());
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
然而,这个过程在记忆中继续增长。
两个问题:
10000
)以使其不会饱和?我已经看到使用这个长度的队列继续充满了推文(它永远不会是空的)我能够抓取700条推文/分钟,这是巨大的)提前谢谢。
答案 0 :(得分:0)
从您提供的代码段确定有点困难。您是否正确注册了StatusesFilterEndpoint?
我建议您编写一个单独的线程来监视队列的大小。
很明显,您无法继续下载所有推文消息。所以你只能: