2012-11-26 7 views
7

Ich verwende twitter4j, um eine Verbindung zur Stream API herzustellen.Wie ändert man Keywords auf twitter stream api mit twitter4j?

Ich verstehe, dass von diesem Beitrag, Change Twitter stream filter keywords without re-opening stream, gibt es keine Möglichkeit, Schlüsselwörter zu ändern, während die Verbindung geöffnet ist. Ich muss das Filterprädikat trennen und ändern und es erneut verbinden.

Ich würde gerne wissen, ob es ein Codebeispiel gibt, das es mir erlauben würde, es zu trennen, die Schlüsselwörter zu ändern und es wieder anzuschließen?

Momentan habe ich versucht, dies im StatusListener unter onStatus() zu tun, wo nach einer X-Zeit das Schlüsselwort in "Saft" geändert wird. Aber es gibt keine Methode für mich, die Verbindung zu schließen und die Verbindung zur Stream-API wiederherzustellen.

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); 
} 

Antwort

4

Sie müssen Cleanup() der Strom zuerst und öffnen Sie dann einen neuen Stream mit Filter (FilterQuery) Methode Spur Bedingungen zu ändern.

1

Sie können dies tun, indem Sie einfach Filter(query) erneut aufrufen, müssen Sie nicht anrufen cleanUp() als Aufruf filter(query) tut dies für Sie. Hier ist, wie ich das tue, und es gibt keine Notwendigkeit, den Strom zu stoppen/neu zu starten!

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); 
    } 
} 

Wo getConfiguration() kehrt mein Configuration Objekt und getListener() meine Rückkehr definiert StatusListener() Objekt

+0

Hat jemand diesen Ansatz versucht? :) – syfantid

+0

Es funktioniert für mich. – Savvas

+0

Ist das der richtige Ansatz? –