Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

Вот как получить все твиты для пользователя (или, по крайней мере, до ~ 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());
}

Если вы прочитали через Документация 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

... так далее.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top