如何使用twitter4j处理速率限制以避免被禁止

时间:2012-11-07 15:48:05

标签: twitter4j

我还没有被Twitter禁止。但是,我想避免它。 我有一个简单的方法,使用StatusListener根据关键字数组拉取推文,然后它们将被branches数组过滤。据我所知,StatusLintener只获取新的推文,并且一直运行直到应用程序停止。

我认为此代码会在一段时间后达到速率限制。那么,有没有办法处理它? 身份验证请求可以在一小时内请求350次,如何使用StatusLintener?

public static void getTweetsKeywords(ConfigurationBuilder cb, String[] keywords, String[] branches,){
    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

    StatusListener listener = new StatusListener() {

        public void onStatus(Status status) {   
            System.out.println(status.getCreatedAt()+" - "+"@" + status.getUser().getScreenName() + " - " + status.getText());
        }

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

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

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

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

    FilterQuery fq = new FilterQuery();
    fq.track(keywords);

    twitterStream.addListener(listener);
    twitterStream.filter(fq);      
}

感谢

1 个答案:

答案 0 :(得分:4)

StatusListener不会轮询Twitter API以获取推文。它收听来自Twitter Streaming API的推文流。因此,它不受速率限制。