如何使用twitter4j在twitter stream api上更改关键字?

时间:2012-11-26 09:13:54

标签: twitter4j twitter-streaming-api

我正在使用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);
}

2 个答案:

答案 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()对象