Получить твиты публичного профиля в твиттере - PullRequest
27 голосов
/ 31 мая 2010

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

Ответы [ 3 ]

27 голосов
/ 01 июня 2010

Чтобы использовать 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);

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

14 голосов
/ 23 ноября 2014

Вот как получить ВСЕ твиты для пользователя (или хотя бы до ~ 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());
}
6 голосов
/ 01 июня 2010

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

Вы также можете использовать «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

... и т. Д.

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

...