You need to cleanUp() the stream first and then open a new stream with filter(FilterQuery) method to change track terms.
How to change keywords on twitter stream api using twitter4j?
-
02-12-2021 - |
Question
I am using twitter4j to connect to Stream API.
I understand that from this post, Change Twitter stream filter keywords without re-opening stream, there is no way to change keywords while the connection is open. I have to disconnect and change the filter predicate and reconnect it.
I would like to know if there is any code sample that would allow me to disconnect it, change the keywords and reconnect it?
Currently, I tried to do this in the StatusListener under onStatus() where after an X amount of time has passed, it will change the keyword to "juice". But there is no method for me to close the connection and reconnect to 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);
}
Solution
OTHER TIPS
You can do this by simply calling Filter(query)
again, no need to call cleanUp()
as calling filter(query)
does this for you. Here's how I do this, and there is no need to stop/restart the stream !
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);
}
}
Where getConfiguration()
returns my Configuration
object and getListener()
returns my defined StatusListener()
object