Подтвердить что ты не робот

Получить твиты публичного твиттера

У меня есть список имен пользователей в Twitter, чьи профили являются общедоступными. Я хочу получить "все твиты", которые они опубликовали с того дня, когда они сформировали свой профиль. Я проверил примеры Twitter4J на GitHub. Согласно документации API Twitter, возвращаются только 20 последних твитов. Есть ли способ выполнить мою задачу?

4b9b3361

Ответ 1

Чтобы использовать Twitter4J для получения всех сообщений от пользователя, вам нужно будет сделать свой запрос на нескольких страницах.

Ниже кода, основанного на примере на GitHub

Twitter unauthenticatedTwitter = new TwitterFactory().getInstance();
//First param of Paging() is the page number, second is the number per page (this is capped around 200 I think.
Paging paging = new Paging(1, 100);
List<Status> statuses = unauthenticatedTwitter.getUserTimeline("google",paging);

Просто зациклируйте и продолжайте захватывать новые страницы, пока не появятся новые сообщения.

Ответ 2

Вот как получить ВСЕ твиты для пользователя (или, по крайней мере, до ~ 3200):

import java.util.*;
import twitter4j.*;
import twitter4j.conf.*;

public static void main(String[] a) {

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setOAuthConsumerKey("YOUR KEYS HERE");
    cb.setOAuthConsumerSecret("YOUR KEYS HERE");
    cb.setOAuthAccessToken("YOUR KEYS HERE");
    cb.setOAuthAccessTokenSecret("YOUR KEYS HERE");

    Twitter twitter = new TwitterFactory(cb.build()).getInstance();

    int pageno = 1;
    String user = "cnn";
    List statuses = new ArrayList();

    while (true) {

      try {

        int size = statuses.size(); 
        Paging page = new Paging(pageno++, 100);
        statuses.addAll(twitter.getUserTimeline(user, page));
        if (statuses.size() == size)
          break;
      }
      catch(TwitterException e) {

        e.printStackTrace();
      }
    }

    System.out.println("Total: "+statuses.size());
}

Ответ 3

Если вы читаете Документацию по Twitter, вы можете получить до 200 твитов за раз, если вы укажете "count = 200" в ваш запрос API.

Вы также можете использовать "page = x" для получения разных результатов с разбивкой по страницам; вы можете продолжать делать это, пока не получите каждый твит, который опубликовал пользователь.

Я не уверен, как ваше приложение Java создаст это, но ваши запросы, вероятно, будут выглядеть следующим образом:

http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=1
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=2
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=3

... и т.д.

Имейте в виду, что эти запросы ограничены по скорости, поэтому вам нужно быть осторожными, чтобы не превышать лимит.