2014-07-07 4 views
1

특정 키워드에 대한 실시간 트윗을 관리했습니다. 지금까지 그렇게 좋았습니다. 속도 제한에 도달하면 RateLimitStatusListener을 추가하려고했습니다.트위터에서 스트리밍 API의 속도 제한을 확인하는 방법

문제는 결코 호출되지 않습니다. 속도 제한에 도달하더라도 호출되지 않습니다. 나는 그것을 이해할 수 없었다. 내 의도는, 속도 제한 오류가 발생하면 오류 처리를 수행하는 것입니다. 그럼에도 불구하고 속도 제한에 도달했는지 여부를 확인하는 다른 방법이 있습니까?

public final class PrintSampleStream { 

    public static void main(String[] args) throws TwitterException { 

     TwitterStream twitterStream = new TwitterStreamFactory().getInstance(); 
     StatusListener listener = new StatusListener() { 
      @Override 
      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
      } 

      @Override 
      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
       System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
      } 

      @Override 
      public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
       System.out.println("Got track limitation notice:" + numberOfLimitedStatuses); 
      } 

      @Override 
      public void onScrubGeo(long userId, long upToStatusId) { 
       System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
      } 

      @Override 
      public void onStallWarning(StallWarning warning) { 
       System.out.println("Got stall warning:" + warning); 
      } 

      @Override 
      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 

     twitterStream.addRateLimitStatusListener(new RateLimitStatusListener() { 
      @Override 
      public void onRateLimitStatus(RateLimitStatusEvent event) { 
       System.out.println("Limit["+event.getRateLimitStatus().getLimit() + "], Remaining[" +event.getRateLimitStatus().getRemaining()+"]"); 
      } 

      @Override 
      public void onRateLimitReached(RateLimitStatusEvent event) { 
       System.out.println("Limit["+event.getRateLimitStatus().getLimit() + "], Remaining[" +event.getRateLimitStatus().getRemaining()+"]"); 
      } 
     }); 

     FilterQuery filterQuery = new FilterQuery(); 
     String[] query = {"#WorldCup2014"}; 
     filterQuery.track(query); 

     twitterStream.addListener(listener); 
     twitterStream.filter(filterQuery); 

    } 
} 

답변

4

언급 한 속도 제한은 스트리밍 API가 아닌 Twitter 나머지 API에만 적용됩니다. 당신은 1 %를 얻을 것을 의미합니다 총 부피

의 1 %를 스트리밍됩니다

: 제한이 다른 방식으로 처리되기 때문에 스트리밍에서, 같은 코드를 추가 할 필요가 없다 스트리밍 API에서 추적하거나 따르는 내용

스트리밍 API에서 속도 제한은 어떻게 결정됩니까?

순간에 공개 스트리밍 API는 클라이언트로 보낸 메시지 수를 전체 짹짹 볼륨 중 작은 부분으로 제한합니다.

https://stream.twitter.com/1/statuses/sample.json에 나와있는 샘플 호스는 공개 스트리밍 캡과 동일한 볼륨에서 모든 트윗을 무작위로 샘플링합니다.

필터링 된 스트림은 일치하는 모든 트윗을 스트리밍 캡과 같은 볼륨까지 반환합니다. 기준과 일치하는 더 많은 트윗이있는 경우 개의 트윗이 전달되지 않은 것을 나타내는 속도 제한 메시지가 스트리밍됩니다. 우리가 어떤 필터를 포함하지 않는 경우

https://dev.twitter.com/discussions/2907

+0

, 그것은 우리에게 전체 트윗 량의 1 %를 줄 것이다? –