Bonjour,
Depuis quelques jours, j'essai de créer un programme en processing avec l'aide de la librairie twitter4j, je veux que le programme récupère des info ou des mots clés dans des tweets et les affichent de manière "artistique"
Mon problème, c'est que le programme plante avec l'erreur "the function getFromUser() does not exist."
Voici mon code (j'utilise processing 2 et twitter4j 3.0.3) :
ArrayList<String> words = new ArrayList(); void setup() { //Set the size of the stage, and the background to black. size(550,550); background(0); smooth(); //Credentials ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setOAuthConsumerKey("xxxxxxx"); cb.setOAuthConsumerSecret("xxxxxx"); cb.setOAuthAccessToken("xxxxxx"); cb.setOAuthAccessTokenSecret("xxxxxx"); //Make the twitter object and prepare the query Twitter twitter = new TwitterFactory(cb.build()).getInstance(); Query query = new Query("#OWS"); query.count(100); //Try making the query request. try { QueryResult result = twitter.search(query); ArrayList tweets = (ArrayList) result.getTweets(); for (int i = 0; i < tweets.size(); i++) { Status t = (Status) tweets.get(i); String user = t.getFromUser(); String msg = t.getText(); Date d = t.getCreatedAt(); println("Tweet by " + user + " at " + d + ": " + msg); //Break the tweet into words String[] input = msg.split(" "); for (int j = 0; j < input.length; j++) { //Put each word into the words ArrayList words.add(input[j]); } }; } catch (TwitterException te) { println("Couldn't connect: " + te); }; } void draw() { //Draw a faint black rectangle over what is currently on the stage so it fades over time. fill(0,1); rect(0,0,width,height); //Draw a word from the list of words that we've built int i = (frameCount % words.size()); String word = words.get(i); //Put it somewhere random on the stage, with a random size and colour fill(255,random(50,150)); textSize(random(10,30)); text(word, random(width), random(height)); }
Il est peut être utile de dire qu'avant que cette erreur arrive, j'ai du changer la classe Tweet en "Status"
et la fonction setRpp(int) en count(int) a cause des changements entre les différentes versions de T4J.
Merci d'avance
Cordialement, Yuki
Hors ligne
Re, je suis allé voir tes conseil, et j'ai réussi cette étape, mais j'ai maintenant un probleme avec cette fonction "QueryResult result = twitter.search(query);" j'ai l'erreur suivante : "ClassNotFoundException: com.google.appengine.api.urlfetch.HTTPRequest" et je ne comprend pas vraiment pourquoi....
Hors ligne
Voilà le code auquel Mushussu et moi sommes arrivé pour n'écouter que les nouveaux tweets parmi les 10 derniers...
Je viens de le tester, il fonctionne chez moi : P5 2.0 // linux Mint // twitter4j-3.0.3
Bon courage...
Dernière modification par Olivier (2013-06-17 18:35:05)
Hors ligne
Re, merci de ta réponse, mais avec ton code, j'ai exactement la même erreur >.< je ne comprends vraiment pas
Si quelqu'un a une solution à ça merci d'avance, je vais essayer sur une partition linux (je suis en ce moment sur windows)
Dernière modification par Yuki (2013-06-17 19:51:33)
Hors ligne
J'ai finalement résolut mon problème : le programme ne se lançais pas car il n'était pas lancé sur une plateforme "GAE", il suffisait donc de supprimer les fichiers du type twitter4j-appengine-X.X.X.jar et de relancer processing.
Hors ligne
Chouette...
Quand ton projet aura abouti, n'hésites pas à nous le présenter dans la section Codes et Travaux.
Hors ligne
Salut, j'ai presque fini mon projet mais je ne parviens pas a faire quelque chose, est ce que tu sais comment obtenir le nombre d'éléments contenue dans une arraylist et le mettre dans une variable ?
Hors ligne
^^' merci bien :p
Hors ligne
Maintenant mon programme fonctionne parfaitement, il répuere les tweets et agit en fonction, mais il ne fait qu'une requete, alors que moi je voudrais qu'il lise les tweets en stream, j'ai un programme "exemple" de stream mais une erreur revien a chaque fois... : sur cette ligne "TwitterStream twitter = new TwitterStreamFactory().getInstance();" processing me retourne "cannot find a class or type named twitterstream", je comprend pas trop...
Voila un extrait de mon code :
static String OAuthConsumerKey = "***********************"; static String OAuthConsumerSecret = "**************************"; static String AccessToken = "****************************"; static String AccessTokenSecret = "*************************"; // if you enter keywords here it will filter, otherwise it will sample String keywords[] = { }; TwitterStream twitter = new TwitterStreamFactory().getInstance(); PImage img; boolean imageLoaded; void setup() { size(800, 600); noStroke(); imageMode(CENTER); connectTwitter(); twitter.addListener(listener); if (keywords.length==0) twitter.sample(); else twitter.filter(new FilterQuery().track(keywords)); } void draw() { background(0); if (imageLoaded) image(img, width/2, height/2); } // Initial connection void connectTwitter() { twitter.setOAuthConsumer(OAuthConsumerKey, OAuthConsumerSecret); AccessToken accessToken = loadAccessToken(); twitter.setOAuthAccessToken(accessToken); } // Loading up the access token private static AccessToken loadAccessToken() { return new AccessToken(AccessToken, AccessTokenSecret); } // This listens for new tweet StatusListener listener = new StatusListener() { public void onStatus(Status status) {
Hors ligne
Le dernier bout de code que je t'ai posté lit les tweets toutes les 4 secondes en n'affichant que ceux qu'il n'a pas déjà affiché...
Du steam en gros...
Sachant qu'en dessous de 4 secondes, l'API de Twitter te kick...
Je ne suis donc pas sûr que tu puisses vraiment obtenir plus proche du temps réel que notre solution.
Je ne dis pas que c'est la meilleure façon de le faire (visiblement il y a une solution interne à la lib), mais le résultat sera difficilement perfectible...
Bon courage...
Dernière modification par Olivier (2013-06-26 14:06:34)
Hors ligne
ok, merci je vais regarder ça de plus pres :p
Hors ligne
Salut, ton programme avec le stream est bien mais j'obtient cette erreur : "IndexOutOfBoundsException: Index: 36 , Size: 36" a cette ligne : Status t = (Status)tweets.get(i);
voila un extrait du programme, merci d'avance...
Hors ligne
Yep...
Effectivement...
Je ne sais pas si c'est liée, mais, a priori, le code que je t'ai donné gère mal les tweets identiques qui floodent...
Nous n'avions pas ce pb sur le hashtag que nous utilisions...
J'ai une autre version du code qui gère le stream de tweets, mais je ne pourrais pas te le donner avant lundi (autre ordi).
(Mushussu si tu passes par là... )
Bon courage...
Hors ligne