Twitter4j TwitterStream не получает все твиты - PullRequest
5 голосов
/ 25 сентября 2011

Я пытаюсь получить все твиты в твиттере с помощью объекта Twitter4j TwitterStj.Я не уверен, что получаю все твиты.Для проверки задержки, после которой потоковый API возвращает твит, я разместил твит со своей учетной записи в твиттере.Но я не получил этот твит даже после долгого времени.

Twitter4j ловит каждый твит, опубликованный в твиттере, или теряет хороший процент твитов?Или я что-то здесь не так делаю?Вот код, который я использую для получения твитов:

        StatusListener listener = new StatusListener(){
        int countTweets = 0;    // Count to implement batch processing

        public void onStatus(Status status) {
            countTweets ++;
            StatusDto statusDto = new StatusDto(status);
            session.saveOrUpdate(statusDto);

            // Save 1 round of tweets to the database
            if (countTweets == BATCH_SIZE) {
                countTweets = 0;
                session.flush();
                session.clear();
            }
        }

        public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}

        public void onTrackLimitationNotice(int numberOfLimitedStatuses) {}

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

        public void onScrubGeo(long arg0, long arg1) {
            // TODO Auto-generated method stub
        }           
    };

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
      .setOAuthConsumerKey(Twitter4jProperties.CONSUMER_KEY)
      .setOAuthConsumerSecret(Twitter4jProperties.CONSUMER_SECRET)
      .setOAuthAccessToken(Twitter4jProperties.ACCESS_TOKEN)
      .setOAuthAccessTokenSecret(Twitter4jProperties.ACCESS_TOKEN_SECRET);

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

    session = HibernateUtil.getSessionFactory().getCurrentSession();
    transaction = session.beginTransaction();

    // sample() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
    twitterStream.sample();

1 Ответ

10 голосов
/ 04 октября 2011

Я открыт для противоречий в этом, но я считаю, что это работает следующим образом ...

Потоковый API дает только пример твитов для не-партнеров.Это «садовый шланг», а не «пожарный шланг», который получают несколько партнеров в Twitter.Но вы можете подать заявку на полный доступ.

.sample () дает этот «садовый шланг».Ваша учетная запись в твиттере не будет иметь доступа к пожарному шлангу, хотя я думаю, что для этого пожарного шланга есть твиттерстрим, если у вас есть доступ.

Поищите «статусы / образцы» на этой странице для уточнения: https://dev.twitter.com/docs/streaming-api/methods

...