我正在使用twitter4j连接到Stream API。
我理解,在这篇帖子Change Twitter stream filter keywords without re-opening stream中,在连接打开时无法更改关键字。我必须断开连接并更改过滤器谓词并重新连接。
我想知道是否有任何代码示例可以让我断开连接,更改关键字并重新连接?
目前,我尝试在onStatus()下的StatusListener中执行此操作,在经过X时间后,它会将关键字更改为“juice”。但是我没有办法关闭连接并重新连接到Stream API。
if (diff>=timeLapse) {
StatusListener listener = createStatusListener();
track = "juice";
twitterStream = new TwitterStreamFactory().getInstance();
twitterStream.addListener(listener);
FilterQuery fq = new FilterQuery();
fq.track(new String[] {track});
startTime=System.currentTimeMillis();
twitterStream.filter(fq);
}
答案 0 :(得分:4)
您需要首先清理流(),然后使用filter(FilterQuery)方法打开一个新流来更改跟踪术语。
答案 1 :(得分:1)
您只需再次拨打Filter(query)
即可完成此操作,无需拨打cleanUp()
,因为呼叫filter(query)
会为您执行此操作。这是我如何做到这一点,并且没有必要停止/重新启动流!
private TwitterStream twitterStream;
private void filterTwitterStream() {
if (conditionToStopStreaming) {
if (null != twitterStream) {
twitterStream.shutdown();
twitterStream = null;
}
} else {
if (twitterStream == null) {
twitterStream = new TwitterStreamFactory(getConfiguration()).getInstance();
twitterStream.addListener(getListener());
}
FilterQuery qry = new FilterQuery();
String[] keywords = {......}
qry.track(keywords);
twitterStream.filter(qry);
}
}
getConfiguration()
返回我的Configuration
对象,getListener()
返回我定义的StatusListener()
对象