2012-11-26 24 views
7

Używam twitter4j do łączenia się z Stream API.Jak zmienić słowa kluczowe na Twitterze za pomocą twitter4j?

Rozumiem, że z tego wpisu, Change Twitter stream filter keywords without re-opening stream, nie można zmienić słów kluczowych, gdy połączenie jest otwarte. Muszę odłączyć i zmienić predykat filtra i ponownie go podłączyć.

Chciałbym wiedzieć, czy istnieje jakaś próbka kodu, która pozwoliłaby mi ją rozłączyć, zmienić słowa kluczowe i ponownie połączyć?

Obecnie próbowałem zrobić to w StatusListener w onStatus(), gdzie po upływie X ilość czasu, zmieni słowo kluczowe na "sok". Ale nie ma sposobu, aby zamknąć połączenie i ponownie połączyć się z 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); 
} 

Odpowiedz

4

Trzeba Cleanup() strumień, a następnie otworzyć nowy strumień metodą filtracyjną (FilterQuery) zmianę warunków torowych.

1

Możesz to zrobić, dzwoniąc ponownie pod numer Filter(query), nie musisz dzwonić pod numer cleanUp(), ponieważ dzwonisz pod numer filter(query). Oto, jak to zrobię i nie ma potrzeby zatrzymywania/restartowania strumienia!

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

Gdzie getConfiguration() powraca moja Configuration przedmiot i getListener() powraca moich zdefiniowane StatusListener() obiekt

+0

Czy ktoś próbował tego podejścia? :) – syfantid

+0

To działa dla mnie. – Savvas

+0

Czy to jest prawidłowe podejście? –