2013-10-23 56 views
0

如果我讓這段代碼運行了3周左右,Twitter Streaming API流會不間斷地運行嗎?或者我需要跟蹤費率限制,如果我確實要怎麼做?Twitter流API速率限制..如何處理它?

import twitter4j.* 

public class SimpleStream { 
public static void main(String[] args) { 
    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setDebugEnabled(true); 
    cb.setOAuthConsumerKey("******"); 
    cb.setOAuthConsumerSecret("*****"); 
    cb.setOAuthAccessToken("********"); 
    cb.setOAuthAccessTokenSecret("******************"); 

    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance(); 

    StatusListener listener = new StatusListener() { 


     @Override 
     public void onStatus(Status status) { 
      User user = status.getUser(); 


      String username = status.getUser().getScreenName(); 
      System.out.println("Screen name: " + username); 

      String name = status.getUser().getName(); 
      System.out.println("User's real name: " + name); 

      long user_id = status.getUser().getId(); 
      System.out.println("Users_id: " + user_id); 

     } 

    }; 

    twitterStream.addListener(listener); 
    twitterStream.sample(); 


    } 
    } 

回答

1

您可以添加RateLimitStatusListener跟蹤如果達到極限,

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()+"]"); 
    } 
}); 

還要檢查Twitter的常見問題解答部分的 '速率限制':https://dev.twitter.com/docs/faq#6861

* 如何速率限制確定在Streaming API?

公共流式API將發送到客戶端的消息數限制在任何給定時刻推文總量的一小部分。

https://stream.twitter.com/1/statuses/sample.json中所述,採樣軟管以等於公共流量上限的體積提供對所有推文的隨機採樣。

已過濾的流會將所有匹配的Tweets返回到等於流式上限的音量。如果有更多推文符合您的條件,則會傳輸一條速率限制消息,指明未推送多少推文。*