twitter-processing-ok

Twitter + Processing : premiers pas

Accé­der à des infor­ma­tions à par­tir de l’API Twit­ter avec Pro­ces­sing est rela­ti­ve­ment facile.

Nous n’avons pas néces­sai­re­ment besoin de connaître cette API sur le bout des doigts pour pou­voir la mani­pu­ler, puisque Yusuke Yama­moto a créé une biblio­thèque JAVA qui sim­pli­fie gran­de­ment le tra­vail. Cette biblio­thèque s’appelle twitter4j, et nous allons l’utiliser pour réa­li­ser notre exemple de démonstration.

Twitter4J – ins­tal­la­tion de la bibliothèque

Avant toute chose, nous devons ins­tal­ler la biblio­thèque dans Processing

1 – Télé­char­ger la biblio­thèque à cette URL (voir cha­pitre Down­load de la page http://twitter4j.org/en/ et télé­char­ger ‘Latest Stable Ver­sion’)

2 – Dézip­per le fichier télé­chargé (twitter4j-3.0.5.zip)

3 – Comme twitter4j n’est pas une biblio­thèque offi­cielle Pro­ces­sing, nous avons besoin de struc­tu­rer le dos­sier et renom­mer les fichiers pour qu’ils soient inter­pré­tés par Pro­ces­sing cor­rec­te­ment. Pour ce faire, nous allons créer un dos­sier nommé twitter4j dans le dos­sier libra­ries de Pro­ces­sing. Par défaut, Sur MAC OS, c’est à cet empla­ce­ment : /Utilisateurs/*nom d’utilisateur*/Documents/Processing.

À l’intérieur du dos­sier twitter4j, créer un dos­sier library.

4 – Dans le dos­sier dézippé twitter4j-3.0.5, vous trou­ve­rez un dos­sier lib. À l’intérieur de celui-ci, vous trou­ve­rez un fichier nommé twitter4j-core-3.0.5.jar.

Dépla­cer ce fichier dans le dos­sier library, dans le dos­sier twitter4j créé à l’étape 3.

Renom­mer le fichier déplacé twitter4j-core-3.0.5.jar en twitter4j.jar.

Voilà !

Si tout s’est bien passé, voici l’arborescence des dos­siers et fichiers que vous devez avoir :

Twit­ter – créa­tion d’un compte développeur

Voici la par­tie déli­cate. Aupa­ra­vant, pour accé­der aux don­nées déli­vrées par Twit­ter, il suf­fi­sait de s’authentifier avec son iden­ti­fiant et son mot de passe. Main­te­nant l’API Twit­ter uti­lise un sys­tème oAuth qui auto­rise les per­sonnes à authen­ti­fier leurs appli­ca­tions via un login deve­lop­peur.
C’est très bien pour la sécu­rité mais com­plique notre tra­vail. Nous avons désor­mais besoin de 4 choses pour authen­ti­fier notre programme :

  1. une consu­mer key
  2. un consu­mer secret
  3. un token access
  4. un token secret

Nous pou­vons obte­nir ces infor­ma­tions en créant un compte développeur.

1 – Aller à https://dev.twitter.com/ et s’y connec­ter avec son lgin et mot de passe de compte twit­ter classique.

2 – Cli­quer sur l’onglet My Appli­ca­tions :

Cli­quer sur Create New Application

3 – Rem­plir les champs obtenus.

4 – On obtient alors les infor­ma­tions sou­hai­tées concer­nant la consu­mer key et le consu­mer secret.

Pour obte­nir le token access et le token secret, cli­quer sur Create my access token au bas de cette page.

5 – Voici les infor­ma­tions créées après un rechar­ge­ment de la page.

6 – Conser­ver toutes ces valeurs dans un fichier sur votre ordi­na­teur. Vous allez en avoir besoin par la suite.

Pro­ces­sing – exemples d’application

Récu­pé­ra­tion de tweets avec un hash­tag particulier

1 – Ouvrir Processing

2 – Créer un nou­veau sketch

3 – Pour nous assu­rer que nous avons bien ins­tallé la biblio­thèque à l’étape Twitter4J – ins­tal­la­tion de la biblio­thèque, nous allons dans le menu → Sketch → Import Library. twitter4j doit être pré­sent dans le menu obtenu.

Cli­quer sur twitter4j.

4 – Dans le sketch Pro­ces­sing appa­raissent 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 col­ler à la suite de ces lignes pour récu­pé­rer les tweets qui ont le hash­tag #pres­tige. Veiller à rem­pla­cer les xxxxxx par les infor­ma­tions obte­nues à l’étape Twit­ter – créa­tion 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);
  }
}

Télé­char­ger le sketch

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);
}

Télé­char­ger le sketch

0