2016-02-18 1 views
1

J'ai essayé d'utiliser les méthodes StatusListener et TwitterStream pour le faire de manière plus propre, mais il semble ne pas capturer tous les tweets des utilisateurs que je veux.Existe-t-il un meilleur moyen d'intercepter les tweets en utilisant Twitter4J?

StatusListener statusListener = new StatusListener() { 
    @Override 
    public void onStatus(Status status) { 
     //my code 
    } 
    //other requiredly-overriden methods 
} 
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); 
configurationBuilder.setOAuthConsumerKey("XXXXX"); 
configurationBuilder.setOAuthConsumerSecret("XXXXXXX"); 
TwitterStream twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance(new AccessToken("XXXXX", "XXXXXXX")); 
twitterStream.addListener(statusListener); 
twitterStream.sample(); 

Je recoururent à vérifier manuellement toutes les 3 secondes si un nouveau tweet a été posté par les utilisateurs que je veux. Cela fonctionne parfaitement, mais semble sale et hacky. Y a-t-il un meilleur moyen?

Répondre

3

Je ne comprends pas complètement. Comment essayez-vous d'attraper les tweets des utilisateurs qui vous intéressent? Si vous utilisiez simplement le flux Twitter et que vous vérifiez ensuite si un tweet provient de l'utilisateur que vous voulez, vous pouvez obtenir des tweets de différentes sources (et peut-être perdre des tweets s'il y en a beaucoup).
Si vous voulez suivre certains utilisateurs, vous devez utiliser un filtre, comme ceci:

StatusListener statusListener = new StatusListener() { 
    @Override 
    public void onStatus(Status status) { 
     //your code to manage the statuses 
    } 
    //other requiredly-overriden methods 
} 
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); 
configurationBuilder.setOAuthConsumerKey("XXXXX"); 
configurationBuilder.setOAuthConsumerSecret("XXXXXXX"); 
TwitterStream twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance(new AccessToken("XXXXX", "XXXXXXX")); 
twitterStream.addListener(statusListener); 

//from here is different at your code 

//you need to set up your user list, with their users id's! 
long[] userslist = YOUR USER LIST; 
//then you create a filter 
FilterQuery filtre = new FilterQuery(); 
//and use that filter to follow the users that you want and to start the stream 
filtre.follow(userslist); 
twitterStream.filter(filtre); 

Avec le filtre, vous pouvez suivre jusqu'à 5000 utilisateurs différents et vous obtiendrez ce qu'ils gazouillent, quand ils sont retweeted et quand ils sont mentionnés

+0

C'est une idée merveilleuse, je ne savais même pas qu'il y avait des filtres. Et je commence le flux en utilisant la méthode sample(), correct? – Anon10W1z

+0

Non, avec sample() vous obtenez un exemple de données de l'ensemble de TwitterStream ... et cet échantillon est très petit. Le flux commence avec twitterStream.filter (filtre); :) – FeanDoe

+0

J'ai compris. Merci de votre aide. Mais le flux reprend toujours les tweets dans le passé, même si j'utilise filterQuery.count (0) ... – Anon10W1z