PJE : Analyse de comportement avec Twitter

TD/TP 2 -- Prise en main de l'API




Avertissement : Dans la suite des TPs, vous allez être amenés à interroger twitter et à récupérer des données. Notre but et d'avoir sous la main des données twitter pour pouvoir les analyser et travailler dessus. D'un point de vue pédagogique, notre objectif premier n'est donc pas de pousser les limites des règles d'accès à twitter ni de les contourner mais de voir les outils techniques et algorithmiques qui nous permettent de construire une application originale. À CHAQUE FOIS QUE CELA EST POSSIBLE, ÉVITER D'INTERROGER DIRECTEMENT TWITTER DEPUIS LE M5 ET PRÉFÉRER LE MODE OFFLINE POUR VOS TESTS !
Pour résumer, vous apprendrez les bases qui vous permettent d'interroger twitter. Cependant, nous vous faisons confiance pour rester sage au sein du M5 pour continuer à avoir le droit de récupérer des données twitter en live !


I. Prise en main de l'api

L'api twitter permet d' 'accéder' à la base de données twitter et de récupérer/poster plusieurs informations. L'API se décompose en quatre classes :
  • SEARCH : permet d'interroger twitter pour récupérer des données simples, essentiellement des tweets.
  • REST : extension avancée de REST qui permet d'accéder à des fonctionnalités avancées de twitter : chercher des utilisateurs, des followers, voir les status, éditer des informations sur son compte, etc.
  • STREAMING : permet de communiquer avec twitter en mode streaming. La particularité de cette api avancée est de permettre l'accès à de gros volume de données twitter et d'être moins contrainte par les limites d'accès et d'interrogrations de twitter. Cependant, cette api requiert la mise en place de méchanisme plus complexe pour l'accès aux données.
  • WEBSITES : permet d'intégrer des fonctions de base twitter dans des sites webs.
Dans la suite nous allons manipuler essentiellement SEARCH et REST (dans une moindre mesure) en réalisant un programme Java qui interroge twitter et nous présente les résultats sous forme lisible.

I.1  Lire la doc !

La documentation Twitter constituera votre référence. Vous pouvez aussi trouver d'autres sources d'informations, sur divers blogs, articles, etc. Des comptes Twitter permettent aussi de suivre l'actualité de l'api: Vous pouvez vous créer un compte twitter et suivre ce qui s'y passe. (N'hésiter pas à vous twitter mutuellement entre binomes).

Pour simplifier, l'api twitter se présente sous la forme de requêtes HTTP. Ces requêtes permettent de communiquer avec les serveurs/services twitter et d'intéragir avec eux. Selon l'API utilisée (SEARCH, REST, Streaming), les requêtes à utiliser ont une syntaxe et des arguments précis. Il s'agit donc dans une première étape de comprendre à travers des exemples simples comment on peut communiquer avec les serveurs twitter à travers des requêtes simples pour récupérer quelques tweets.

--> De façon générale, l'essentiel de ce dont vous avez besoin est accessible depuis cette page.

--> Regarder plus en détail l'api SEARCH (la plus simple). Remarquez le type de requêtes qui peuvent être émises.

--> Regarder plus en détail la spécification de l'api SEARCH.

Notez le type de requêtes qui peuvent être émises et les authentifications requises.


I.2  Authentification


Pour pouvoir utiliser l'api SEARCH, il faut pouvoir s'authentifier en utilisant le protocole OAuth. En effet depuis l'api SEARCH 1.1 les requêtes non authentifiées ne sont plus authorisées.

--> Examiner les pages suivantes expliquant l'utilisation d'OAuth avec l'api twitter, e.g., :
  • https://dev.twitter.com/docs/auth/using-oauth
  • https://dev.twitter.com/docs/auth

--> Examiner comment obtenir un ticket d'acess pour votre application, e.g., :
  • https://dev.twitter.com/docs/auth/obtaining-access-tokens
  • https://dev.twitter.com/docs/auth/application-only-auth
  • https://dev.twitter.com/docs/auth/tokens-devtwittercom

Une façon simple d'utiliser l'api SEARCH twitter est de créer une 'application' et de lui donner les droits nécessaires pour interroger la base twitter.

--> Si vous n'avez pas de compte twitter, créez en un nouveau.

--> Connecter vous sur l'espace dédié aux 'développeurs' pour créer une nouvelle application : https://dev.twitter.com/apps

--> En utilisant le boutton 'Create new application', déclarer une nouvelle application en lui attribuant un nom et en renseignant un nom de site web (censé héberger l'application). Pour cela vous pouvez vous créer une page web sur google par exemple.

--> Une fois votre application déclarée, vous arrivez sur une page qui vous permet de lui créer un ticket d'accès; cette même page renseigne aussi les différentes informations nécessaires à l'authentification. Il est important de bien noter ces différentes informations.


II. Émettre une requête avec Java

Les informations générées dans l'étape précédente vont permettre à votre application de s'authentifier et de pouvoir emmettre des requêtes. Il existe plusieurs librairies permettant d'emmettre des requêtes twitters.

--> Consulter la page suivante donnant une liste non-exhaustive de quelques librairies disponibles : https://dev.twitter.com/docs/twitter-libraries

Dans la suite nous allons utiliser la librairie Java twitter4j (Il n'est pas interdit d'utiliser d'autres librairies...)

--> Consulter la documentation (!) ici : http://twitter4j.org/

--> Voir les examples de code Java fournit et se concentrer en particulier sur l'authentification et la recherche de tweets. Notez comment les informations d'authentification précédentes sont utilisées.

Les fonctionnalités implémentées par la librairie Twitter4j vous permettent d'envoyer des requêtes (http) vers les serveurs twitters. Cependant, l'accès à Internet depuis les salles du bâtiment M5 est restreint. Par exemple, lorsque vous utilisez votre naviguateur pour contacter un serveur web depuis l'intérieur d'une salle TP, votre naviguateur passe par un proxy HTTP pour pouvoir accèder à internet. Le proxy HTTP relaie la requête initialement émise par votre naviguateur, récupère la réponse et la fait parvenir à votre naviguateur qui affiche alors le résultat. Cela est expliqué dans le schéma suivant:

proxy


--> La librairie twitter4j permet de configurer un proxy HTTP de plusieurs façon notamment en configurant des variables d'environnements. Consulter la documentation pour en savoir plus : http://twitter4j.org/en/configuration.html

Deux choses sont donc à retenir pour réaliser notre premier programme qui interroge twitter à la recherche de nouveaux tweets:
  • Pouvoir emmettre une requête authentifiée avec twitter4j en utilisant les différentes informations générées précédemment (token d'acces, etc).
  • Utiliser le proxy pour accèder à l'exterieur lorsque vous êtes à l'intérieur du M5.

III. Émettre votre première requête avec Java


En s'appuyant sur la documentation et les pointeurs précédemment donnée réaliser un programme Java qui permet d'emmettre une requête de recherche simple avec un mot clé de votre choix (en s'appuyant sur la librairie twitter4j).

 
IV. Une interface SWING

Pour plus de convivialité, vous allez réaliser une petite interface swing qui permet d'emmettre une requête et de présenter le résultat sous forme lisible. Les tests seront toujours effectués en mode offline c'est à dire que vous allez faire le moyen possible appel au module d'emission de requetes twitter lors du developpement de votre interface graphique.

En effet, vous allez commencer par construire le squelête de votre interface. Ensuite nous intérgrerons un à un les autre composants pour l'émission d'une requête et le traitement des résultats.

Vous êtes libres d'organiser votre interface graphique comme vous le souhaitez. Cependant à termes, les fonctionnalités de bases suivantes doivent être réalisées :
  • Interroger twitter en mode Search.
  • Afficher les tweets résultats.
  • Vérifier le nombre de requêtes restantes (Requête de type Rate Limit)
  • Configurer votre application pour pouvoir fonctionner en mode proxy ou pas. Cela vous permettra de tester depuis chez vous dans le cas ou n'avez pas pas besoin d'un proxy.
  • Sauvegarder le résultat de votre requête. Cela vous permettra de construire votre propre base twitter. Nous reviendrons sur la réalisation effective de ce point lors de prochains TPs.
--> Commencez par réfléchir le design de votre interface graphique et commencer sa realisation en utilisant l'api Swing de java.

--> Intégrer l'emission d'une requête.

Soyez raisonable, trop de requêtes, même de type Rate, pourraient déclencher des soupçons du côté twitter!

--> Rajoutez l'interrogation systématique de twitter à l'aide d'une requête Rate Limit pour vérifier que vous avez encore des jetons disponibles.


V. Pour aller plus loin : Bonus ;)

--> Examinez les paramêtres acceptés par l'api Search (nombre de tweets, langue, etc). Modifier votre interface graphique pour permettre de positionner ces paramêtres avant l'emission d'une requête.

--> Notez que la librairie twitter4j permet aussi d'emettre d'utiliser l'API Streaming de tweeter. Cette API permet de récupérer plus de données mais nécessite un certains effort de prise en main. Consulter la documentation des exemples de twitter4j et essayer d'emmettre des requêtes avancées de type Streaming. Cela vous sera très utiles pour constituer une base de tweets de meilleurs qualité, plus volumineuse, en un temps plus court.