web-dev-qa-db-fra.com

Obtenez des tweets d'un profil de Twitter public

J'ai une liste de noms d'utilisateur sur Twitter dont les profils sont publics. Je souhaite obtenir "tous les tweets" qu'ils ont posté du jour où ils ont formé leur profil. J'ai vérifié Twitter4J Exemples sur GitHub .
[.____] Selon la documentation de l'API Twitter, seules les 20 tweets les plus récentes sont renvoyées. Y a-t-il de toute façon je pourrais effectuer ma tâche?

27
Dexter

Pour utiliser Twitter4J pour obtenir tous les messages d'un utilisateur, vous devez effectuer votre demande sur plusieurs pages.

Sous le code à base d'un exemple sur 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);

Juste boucle et continuer à saisir de nouvelles pages jusqu'à ce qu'il n'y ait pas de nouveaux postes ne devraient fonctionner.

27
Tyler

Voici comment obtenir tous les tweets pour un utilisateur (ou au moins jusqu'à ~ 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());
}
15
rednoyz

Si vous lisez via la Documentation de Twitter , vous pouvez récupérer jusqu'à 200 tweets à la fois si vous spécifiez "Compte = 200" dans votre demande d'API.

Vous pouvez également utiliser "page = x" pour obtenir différents résultats paginé; Vous pouvez continuer à faire cela jusqu'à ce que vous ayez récupéré chaque tweet que l'utilisateur ait posté.

Je ne sais pas comment votre Java Application créerait ceci, mais vos demandes ressembleraient probablement à:

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

... etc.

N'oubliez pas que ces demandes sont limitées sur le taux, vous devez donc veiller à ne pas dépasser la limite.

6
Chris McFarland