Accéder à des informations à partir de l’API Twitter avec Processing est relativement facile.
Nous n’avons pas nécessairement besoin de connaître cette API sur le bout des doigts pour pouvoir la manipuler, puisque Yusuke Yamamoto a créé une bibliothèque JAVA qui simplifie grandement le travail. Cette bibliothèque s’appelle twitter4j, et nous allons l’utiliser pour réaliser notre exemple de démonstration.
Twitter4J – installation de la bibliothèque
Avant toute chose, nous devons installer la bibliothèque dans Processing
1 – Télécharger la bibliothèque à cette URL (voir chapitre Download de la page http://twitter4j.org/en/ et télécharger ‘Latest Stable Version’)
2 – Dézipper le fichier téléchargé (twitter4j-3.0.5.zip)
3 – Comme twitter4j n’est pas une bibliothèque officielle Processing, nous avons besoin de structurer le dossier et renommer les fichiers pour qu’ils soient interprétés par Processing correctement. Pour ce faire, nous allons créer un dossier nommé twitter4j dans le dossier libraries de Processing. Par défaut, Sur MAC OS, c’est à cet emplacement : /Utilisateurs/*nom d’utilisateur*/Documents/Processing.
À l’intérieur du dossier twitter4j, créer un dossier library.
4 – Dans le dossier dézippé twitter4j-3.0.5, vous trouverez un dossier lib. À l’intérieur de celui-ci, vous trouverez un fichier nommé twitter4j-core-3.0.5.jar.
Déplacer ce fichier dans le dossier library, dans le dossier twitter4j créé à l’étape 3.
Renommer le fichier déplacé twitter4j-core-3.0.5.jar en twitter4j.jar.
Voilà !
Si tout s’est bien passé, voici l’arborescence des dossiers et fichiers que vous devez avoir :
Twitter – création d’un compte développeur
Voici la partie délicate. Auparavant, pour accéder aux données délivrées par Twitter, il suffisait de s’authentifier avec son identifiant et son mot de passe. Maintenant l’API Twitter utilise un système oAuth qui autorise les personnes à authentifier leurs applications via un login developpeur.
C’est très bien pour la sécurité mais complique notre travail. Nous avons désormais besoin de 4 choses pour authentifier notre programme :
- une consumer key
- un consumer secret
- un token access
- un token secret
Nous pouvons obtenir ces informations en créant un compte développeur.
1 – Aller à https://dev.twitter.com/ et s’y connecter avec son lgin et mot de passe de compte twitter classique.
2 – Cliquer sur l’onglet My Applications :
Cliquer sur Create New Application
3 – Remplir les champs obtenus.
4 – On obtient alors les informations souhaitées concernant la consumer key et le consumer secret.
Pour obtenir le token access et le token secret, cliquer sur Create my access token au bas de cette page.
5 – Voici les informations créées après un rechargement de la page.
6 – Conserver toutes ces valeurs dans un fichier sur votre ordinateur. Vous allez en avoir besoin par la suite.
Processing – exemples d’application
Récupération de tweets avec un hashtag particulier
1 – Ouvrir Processing
2 – Créer un nouveau sketch
3 – Pour nous assurer que nous avons bien installé la bibliothèque à l’étape Twitter4J – installation de la bibliothèque, nous allons dans le menu → Sketch → Import Library. twitter4j doit être présent dans le menu obtenu.
4 – Dans le sketch Processing apparaissent ces lignes :
import twitter4j.conf.*; import twitter4j.internal.async.*; import twitter4j.internal.org.json.*; import twitter4j.internal.logging.*; import twitter4j.json.*; import twitter4j.internal.util.*; import twitter4j.management.*; import twitter4j.auth.*; import twitter4j.api.*; import twitter4j.util.*; import twitter4j.internal.http.*; import twitter4j.*; import twitter4j.internal.json.*;
5 – Voici le code qu’il faut coller à la suite de ces lignes pour récupérer les tweets qui ont le hashtag #prestige. Veiller à remplacer les xxxxxx par les informations obtenues à l’étape Twitter – création d’un compte développeur
//!! Attention // les requêtes avec ce programme sont limités // à 15 requêtes par 15 minutes // plus d'infos ici : // REST API Rate Limiting in v1.1 (general topic about rate limiting in the Twitter API) // REST API v1.1 Limits per window by resource (rate limits for each endpoint) // Error Codes and Responses (which explains to you what is your '88' response code). import java.util.*; //Déclaration des objets TwitterFactory twitterFactory; Twitter twitter; RequestToken requestToken; //Déclaration de l'objet requête Query requete; //Déclaration de l'objet de résultat de requête QueryResult resultat; //Déclaration d'un tableau pour stocker les requêtes récupérées de Twitter ArrayList tweets; //déclaration des variables textes qui nous permettront d'utiliser //les résultats de requêtes String msg, user, pseudo; void setup() { //Taille de la fenêtre de l'applet size(550, 550); smooth(); //Authentification ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setOAuthConsumerKey("xxxxxxxx"); cb.setOAuthConsumerSecret("xxxxxxxx"); cb.setOAuthAccessToken("xxxx-xxxxx"); cb.setOAuthAccessTokenSecret("xxxxxxx"); //Utilisation des informations d'authentification pour se connecter à l'API twitter twitterFactory = new TwitterFactory(cb.build()); twitter = twitterFactory.getInstance(); } void draw() { // on règle le rafraichissement de l'affichage de la page à // toutes les 5 secondes pour éviter des demandes trop fréquentes frameRate(1/5); //on renouvelle l'arrière plan noir pour éviter la superposition des messages background(0); //Essai try { // Requête de recherche, ici le hashtag prestige requete = new Query("#prestige"); //Récupération des résultats de requête resultat = twitter.search(requete); //Stockage des résultats de requête result dans le tableau Tweet tweets = (ArrayList) resultat.getTweets(); // isolement de chaque tweet // pour chaque élément du tableau tweets... for (int i = 0; i < tweets.size(); i++) { // ...obtenir le statut du tweet Status t=(Status) tweets.get(i); // ...obtenir l'utilisateur du tweet User u=(User) t.getUser(); // ...obtenir le nom de l'utilisateur du tweet user=u.getName(); // ...obtenir le texte du message du tweet msg = t.getText(); //obtenir le pseudo de l'utilisateur du tweet pseudo = t.getUser().getScreenName(); // ...obtenir la date du message du tweet Date date = t.getCreatedAt(); //Couleur du texte affiché dans l'applet Processing fill(255); // Taille du texte affiché dans l'applet Processing textSize(10); // Affichage du texte (en récupérant la variable msg) dans l'applet Processing // chaque nouveau tweet sera affiché à une nouvelle ligne // avec un interligne de 15 px text(msg, 10, 15+15*i); } } // si l'essai ne fonctionne pas, on imprime dans la console "Couldn't connect:" catch (TwitterException e) { println("Couldn't connect: " + e); } }
Envoi de tweets
//importation des différents éléments de la bibliothèque twitter4j import twitter4j.conf.*; import twitter4j.internal.async.*; import twitter4j.internal.org.json.*; import twitter4j.internal.logging.*; import twitter4j.json.*; import twitter4j.internal.util.*; import twitter4j.management.*; import twitter4j.auth.*; import twitter4j.api.*; import twitter4j.util.*; import twitter4j.internal.http.*; import twitter4j.*; import twitter4j.internal.json.*; // Variables de type chaine de caractères (string) utilisées // pour les authentifications à l'API de twitter String OAuthConsumerKey = "xx"; String OAuthConsumerSecret = "xx"; static String AccessToken = "xx"; static String AccessTokenSecret = "xx"; // Déclaration des objets TwitterFactory et Twitter TwitterFactory twitterFactory; Twitter twitter; Status status; void setup() { // Taille de la fenêtre de l"applet size(100, 100); // Arrière-plan background(0); //Authentification ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setOAuthConsumerKey(OAuthConsumerKey); cb.setOAuthConsumerSecret( OAuthConsumerSecret ); cb.setOAuthAccessToken(AccessToken); cb.setOAuthAccessTokenSecret( AccessTokenSecret ); //Utilisation des informations d'authentification pour se connecter à l'API twitter twitterFactory = new TwitterFactory(cb.build()); twitter = twitterFactory.getInstance(); } void draw() { // } // à chaque fois que nous cliquons dans la fenêtre de l'applet... void mousePressed() { //… utilisation de la fonction sendTweetpour envoyer le message "Hello from Processing Sketch. Test with Twitter API" sendTweet("Hello from Processing Sketch. Test with Twitter API."); } // Fonction d'envoi de tweet void sendTweet(String t) { try { status = twitter.updateStatus(t); println("Successfully updated the status to [" + status.getText() + "]."); } catch(TwitterException e) { println("Send tweet: " + e + " Status code: " + e.getStatusCode()); } } // Chargement des authentifications d'AccesToken private static AccessToken loadAccessToken() { return new AccessToken(AccessToken, AccessTokenSecret); }