7

我正在使用 twitter4j 连接到 Stream API。

我从这篇文章中了解到,在不重新打开流的情况下更改 Twitter 流过滤器关键字,在连接打开时无法更改关键字。我必须断开连接并更改过滤谓词并重新连接它。

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

目前,我尝试在 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);
}
4

2 回答 2

4

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

于 2012-11-29T14:53:03.957 回答
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);
    }
}

WheregetConfiguration()返回我的Configuration对象​​并 getListener()返回我定义的StatusListener()对象

于 2014-12-22T01:37:09.897 回答