2012-11-26 20 views
7

Sto usando twitter4j per connettermi all'API Stream.Come cambiare le parole chiave su twitter stream api usando twitter4j?

Capisco che da questo post, Change Twitter stream filter keywords without re-opening stream, non è possibile modificare le parole chiave mentre la connessione è aperta. Devo disconnettere e modificare il predicato del filtro e riconnetterlo.

Vorrei sapere se è disponibile un esempio di codice che mi consenta di disconnetterlo, modificare le parole chiave e ricollegarlo?

Attualmente, ho provato a farlo in StatusListener sotto onStatus() dove dopo un intervallo di tempo X è passato, cambierà la parola chiave in "succo". Ma non c'è alcun metodo per me per chiudere la connessione e riconnettersi a 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); 
} 

risposta

4

È necessario cleanup() il flusso di prima e quindi aprire un nuovo flusso con metodo del filtro (FilterQuery) per cambiare i termini della pista.

1

È possibile effettuare questa operazione semplicemente chiamando Filter(query) di nuovo, non è necessario chiamare cleanUp() come chiamare filter(query) fa questo per voi. Ecco come faccio questo, e non c'è bisogno di fermare/riavviare il flusso!

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

Dove getConfiguration() ritorna il mio oggetto Configuration e getListener() ritorna miei definiti StatusListener() oggetto

+0

Qualcuno ha provato questo approccio? :) – syfantid

+0

Funziona per me. – Savvas

+0

È questo l'approccio corretto? –