2012-11-26 5 views
7

Stream API에 연결하기 위해 twitter4j를 사용하고 있습니다.twitter4j를 사용하여 twitter stream api에서 키워드를 변경하는 방법은 무엇입니까?

이 게시물 Change Twitter stream filter keywords without re-opening stream에서 알 수 있듯이 연결이 열려있는 동안 키워드를 변경할 수 없습니다. 필터 조건자를 연결 해제하고 변경 한 다음 다시 연결해야합니다.

연결을 끊고 키워드를 변경하고 다시 연결할 수있는 코드 샘플이 있는지 알고 싶습니다.

현재는 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

당신은 정리 필요() 스트림 제 다음 트랙 조건을 변경하는 필터 (FilterQuery) 방법으로 새로운 스트림을 연다.

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

getConfiguration() 반환 내 Configuration 객체와 getListener() 반환 제는

+0

이 사람이이 방법을 시도했습니다 StatusListener() 객체 정의는 어디? :) – syfantid

+0

그것은 나를 위해 작동합니다. – Savvas

+0

올바른 방법입니까? –

관련 문제