如何使用twitter4j更改Twitter Stream API中的关键词?

7

我正在使用twitter4j连接Stream API。

我了解到从这篇文章(Change Twitter stream filter keywords without re-opening stream)中得知,在连接打开的情况下无法更改关键字。我必须断开连接,更改过滤谓词并重新连接它。

我想知道是否有任何代码示例可以让我断开连接,更改关键字并重新连接?

目前,我尝试在StatusListener下的onStatus()中执行此操作,在经过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个回答

4

您需要先使用cleanUp()方法清理流,然后使用filter(FilterQuery)方法打开一个新的流来更改跟踪条件。


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接