extracttweets - lirmm

54
Rapport de projet ExtractTweets Etudiants : Stephen BAROAN Florian MASIP Suzy NZINGOULA Abdoul SY Encadrants : JĂ©rĂŽme AZÉ Pascal PONCELET Julien RABATEL Master 1 Informatique (AIGLE – IMAGINA) 28 Janvier 2015 — 25 Mai 2015

Upload: others

Post on 18-Jun-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ExtractTweets - LIRMM

Rapport de projet

ExtractTweets

Etudiants :Stephen BAROANFlorian MASIPSuzy NZINGOULAAbdoul SY

Encadrants :JĂ©rĂŽme AZÉ

Pascal PONCELETJulien RABATEL

Master 1 Informatique (AIGLE – IMAGINA)

28 Janvier 2015 — 25 Mai 2015

Page 2: ExtractTweets - LIRMM

Remerciements

Nous avons eu la chance, dans le cadre de notre formation en master informatique, d’ĂȘtre engagĂ©s dansla rĂ©alisation d’un projet enrichissant et instructif.

Nous tenons Ă  remercier toutes les personnes impliquĂ©es dans la mise en place de ce projet. En particu-lier, nous souhaitons tĂ©moigner notre reconnaissance Ă  nos encadrants : JĂ©rĂŽme AzĂ©, Pascal Poncelet etJulien Rabatel pour la confiance qu’ils nous ont accordĂ©e pour la rĂ©alisation de ce projet. Nous voudrionsĂ©galement les remercier pour leur aide, leur Ă©coute, ainsi que leur soutien devant toutes les difficultĂ©sauxquelles nous avons pu ĂȘtre confrontĂ©s tout au long de ce projet.

Nous souhaitons Ă©galement remercier Mr Bourreau qui, lors de ses enseignements sur la gestion deprojet nous a inspirĂ© sur l’organisation Ă  mettre en place au sein de notre groupe et avec nos encadrants.

Page 3: ExtractTweets - LIRMM

Table des matiĂšres

Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Cahier des charges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3 Les principaux éléments en jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.3.1 ScĂ©nario d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.2 La base de donnĂ©es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.3 L’interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.4 Le systĂšme de rĂ©cupĂ©ration et de stockage des tweets . . . . . . . . . . . 10

1.4 Les interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.5 Les contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Rapport technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1 Analyse du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1.1 Analyse des besoins, analyse du domaine et analyse applicative . . . . . . 112.1.2 Diagramme de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . 112.1.3 Diagramme UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2 Technologies utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Conception base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Conception interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.5 Mécanisme global du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.5.1 Structure du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5.2 GĂ©nĂ©ration des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.5.3 Traitement des requĂȘtes d’un utilisateur . . . . . . . . . . . . . . . . . . . 212.5.4 Traitement des requĂȘtes utilisateurs avec AJAX . . . . . . . . . . . . . . 222.5.5 Communication entre l’interface Web et l’application Java . . . . . . . . 22

2.6 Conception application Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6.1 UML Application Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.6.2 ModalitĂ©s d’accĂšs Ă  Twitter . . . . . . . . . . . . . . . . . . . . . . . . . . 242.6.3 Connexion Ă  l’API Twitter avec twitter4j . . . . . . . . . . . . . . . . . . 252.6.4 RĂ©cupĂ©ration des tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.6.5 Connexion et insertion dans la base de donnĂ©es . . . . . . . . . . . . . . . 28

2.7 Analyse/Statistiques des tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.7.1 Nuages de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.7.2 Évolution du nombre de tweets en fonction du temps . . . . . . . . . . . 31

2.8 IdĂ©es abandonnĂ©es et amĂ©liorations envisagĂ©es . . . . . . . . . . . . . . . . . . . . 333 Rapport d’activitĂ© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.1 MĂ©thode de gestion de projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.1.1 PrĂ©sentation de la mĂ©thode . . . . . . . . . . . . . . . . . . . . . . . . . . 343.1.2 Bilan d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2 Planification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.1 Planning prévu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.2 Planning réel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Bibliographie/Sitographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3

Page 4: ExtractTweets - LIRMM

Table des figures

1 Exemple de Tweet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Vue gĂ©nĂ©rale des composants du projet ExtractTweets . . . . . . . . . . . . . . . . . . . . 83 Diagramme de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Diagramme UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Page de lancement d’une recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Page affichage des resultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Interface web lancement d’une recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Interface Web ajout d’une bounding box . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Interface Web partie resultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1810 Architecture MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911 UML application java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2412 Parser un fichier Json en un objet java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2613 RĂ©cupĂ©ration tweets gĂ©olocalisĂ©s avec l’API REST . . . . . . . . . . . . . . . . . . . . . . 2614 RĂ©cupĂ©ration des codes d’accĂšs Twitter Developers Ă  partir de la base de donnĂ©es . . . . . 2715 Authentification au service twitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2716 Connexion Ă  la base de donnĂ©es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2817 Apercu d’un nuage de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3018 Apercu des graphes de l’évolution du nombre de tweets en fonction du temps . . . . . . . 32

Table des Annexes

Annexe A - La classe vue (PHP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Annexe B - MĂ©canisme de routage de l’action demandĂ©e par l’utilisateur (PHP) . . . . . . . . . . . 39Annexe C - RĂ©cupĂ©ration des donnĂ©es du formulaire de recherche (Javascript) . . . . . . . . . . . . 40Annexe D - Envoi des donnĂ©es avec AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Annexe E - Fonction de validation d’une recherche (PHP) . . . . . . . . . . . . . . . . . . . . . . . 42Annexe F - Fonction d’exĂ©cution de l’application Java (PHP) . . . . . . . . . . . . . . . . . . . . . 43Annexe G - Une insertion dans la table des tweets (Java) . . . . . . . . . . . . . . . . . . . . . . . 44Annexe H - Planning prĂ©visionnel - Liste des tĂąches . . . . . . . . . . . . . . . . . . . . . . . . . . 45Annexe I - Planning prĂ©visionnel - Attribution des tĂąches dans le temps . . . . . . . . . . . . . . . 46Annexe J - Planning rĂ©el . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Annexe K - Manuel d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4

Page 5: ExtractTweets - LIRMM

Introduction

De nos jours, les rĂ©seaux sociaux tiennent une place majeure dans la diffusion de l’actualitĂ©. Ils sontd’ailleurs parfois acteurs de cette actualitĂ© de par la mobilisation qu’ils peuvent amener. Notre utilisationdes rĂ©seaux sociaux a beaucoup changĂ© ces dix derniĂšres annĂ©es. Ils sont en effet devenus omniprĂ©sentsau fil du temps et contribuent au dĂ©veloppement d’une nouvelle forme d’expression. Expression quis’accompagne souvent de comportements dĂ©complexĂ©s face Ă  l’écran. Ces interfaces sociales sont devenuesun moyen d’expression plus libre et plus accessible pour beaucoup de personnes. L’étude de ces rĂ©seauxpeut donc apporter de nombreuses informations Ă  la fois sur la mise en place d’une pensĂ©e collective maisĂ©galement sur des messages plus singuliers et ponctuels.

L’application de ces Ă©tudes peut se retrouver dans divers domaines, notamment dans la dĂ©tection dessuicides ou des situations de harcĂšlement.

Une autre application de l’étude des flux de statuts sur les rĂ©seaux sociaux est l’étude de la propagationou l’étendue des Ă©pidĂ©mies comme la grippe.

Ce genre d’outils peut Ă©galement servir Ă  suivre les tendances politiques selon les rĂ©gions par exemple.

Tous ces exemples montrent bien l’utilitĂ© du dĂ©veloppement d’outils accessibles pour l’étude et le suivi desstatuts sur les rĂ©seaux sociaux. Ils peuvent ĂȘtre d’une grande utilitĂ© dans les recherches comportementalesdes sociĂ©tĂ©s.

Twitter 1, de l’anglais « gazouiller », « jaser » est l’un des rĂ©seaux les plus en vogue depuis ces cinqderniĂšres annĂ©es. FondĂ© en 2006 par Jack Dorsey, Evan Williams, Biz Stone et Noah Glass, Twitter peutĂȘtre vu comme le mĂ©lange d’un blog, d’un tchat public, d’un rĂ©seau social et d’une plateforme d’échangede SMS. Le principe est de poster de maniĂšre publique (par dĂ©faut) et asymĂ©trique, des statuts d’unetaille maximum de 140 caractĂšres appelĂ©s des tweets (voir un exemple figure 1). Chaque utilisateur a lapossibilitĂ© de s’abonner aux personnes qu’il souhaite suivre, il verra donc sur son mur d’actualitĂ©s tousles postes de ces personnes.

1. https ://twitter.com/

5

Page 6: ExtractTweets - LIRMM

Figure 1 – Exemple de Tweet

Twitter est une application trĂšs facile Ă  utiliser, il est pris en main mĂȘme par les plus jeunes. Parce biais, il est possible d’acceder Ă  la publication de nombreuses donnĂ©es mises Ă  disposition du publicpar dĂ©faut. De ce fait, Twitter est une vĂ©ritable source d’informations qui peut apporter de nouvellesconnaissances sur la sociĂ©tĂ© dans diffĂ©rents domaines d’études.

Une API a Ă©tĂ© mise en place par Twitter, permettant d’interroger sa base de donnĂ©es, de rĂ©cupĂ©rer desinformations concernant les tweets et de poster des tweets. Deux mĂ©thodes principales sont utilisĂ©es dansce cadre, on parlera de l’API REST qui permet de faire des requĂȘtes sur les tweets dĂ©jĂ  prĂ©sents dansla base de donnĂ©es, et de l’API STREAMING qui permet d’accĂ©der au flux de tweets en temps rĂ©el demaniĂšre continue.

Notre projet a pour but le dĂ©veloppement d’un outil assistant l’étude du flux de statuts circulantsur Twitter. Plus prĂ©cisĂ©ment, notre but est la rĂ©alisation d’une plateforme d’extraction de tweets, quipermettra ensuite l’analyse de ces derniers.

Pour prĂ©senter ce projet, nous dĂ©taillerons dans un premier temps les diffĂ©rents objectifs ainsi queles contraintes liĂ©es Ă  la diversitĂ© des outils utilisĂ©s. Dans un second temps, nous dĂ©taillerons l’aspecttechnique de chaque partie de la conception. Puis dans un troisiĂšme temps, nous nous pencherons surl’organisation mise en place autour du projet.

6

Page 7: ExtractTweets - LIRMM

1 Cahier des charges

1.1 Contexte

Le LIRMM (Laboratoire d’Informatique, de Robotique et de MicroĂ©lectronique de Montpellier) futcrĂ©Ă© en 1992, et rĂ©sulte d’un projet commun entre le CNRS et l’UniversitĂ© de Montpellier. A dominanceinformatique, le laboratoire se divise en plusieurs Ă©quipes opĂ©rant dans divers domaines tels que l’optimi-sation des calculs, des algorithmes, ou encore le gĂ©nie logiciel. L’une des Ă©quipes du LIRMM, ADVANSE(ADVanced Analytics for data SciencE) s’intĂ©resse en particulier Ă  la fouille de donnĂ©es et Ă  l’extractionde connaissances, en axant ses recherches autour de la santĂ© et l’environnement. Quelques-uns des projetsde l’équipe concernent notamment les rĂ©seaux sociaux, par exemple les projets Web Report portant surla dĂ©tection des catastrophes naturelles dans les tweets et Polop qui s’intĂ©resse aux Ă©changes de tweetssur les diffĂ©rents partis politiques. Autre exemple, la rĂ©alisation d’un dĂ©monstrateur de suivi du virus dela grippe. Tous ces projets impliquent la rĂ©cupĂ©ration, le suivi et l’analyse de donnĂ©es massives.

C’est dans ce contexte que s’intĂšgre notre projet permettant l’extraction d’une grande quantitĂ© de donnĂ©esainsi que leur analyse afin de pouvoir les prĂ©senter de façon exploitable. Notre support, le rĂ©seau socialTwitter, est un choix stratĂ©gique car il est trĂšs populaire et rĂ©actif.

L’utilisation massive de Twitter en fait un vĂ©ritable outil d’études sur les sociĂ©tĂ©s dans divers domaines.En effet, Twitter permet de se tenir informĂ© en temps rĂ©el de ce qui se passe, le service est trĂšs utilisĂ©par les journalistes car chacun peut y raconter ce dont il est tĂ©moin, ces journalistes y rĂ©percutent lesinformations vĂ©rifiĂ©es plus rapidement que sur les mĂ©dias traditionnels. Bien entendu, la prudence et lavĂ©rification des sources s’imposent car il y a aussi des cas de propagations de rumeurs.

Twitter permet de suivre un sujet ou un centre d’intĂ©rĂȘt prĂ©cis, d’ĂȘtre tenu informĂ© des derniĂšres nou-veautĂ©s, des derniers articles parus, des projets en cours. . . On peut ainsi rĂ©aliser une veille ciblĂ©e, sur lesproblĂ©matiques diverses, en participant Ă  une analyse collective faite par des personnes intĂ©ressĂ©es par lesujet.

Notre projet consiste donc Ă  fournir un outil permettant la rĂ©cupĂ©ration et l’analyse de tweets selondiffĂ©rents critĂšres. Il pourra servir par exemple, Ă  l’analyse des Ă©motions grĂące Ă  des outils dĂ©veloppĂ©s auLIRMM. Nous allons explorer les gĂ©nĂ©ralitĂ©s concernant le cƓur du projet ExtractTweet.

1.2 Généralités

Le but de ce projet est de mettre au point une application indĂ©pendante par laquelle il sera possibled’entrer des critĂšres de recherche (exemples : mots-clĂ©s, gĂ©olocalisation etc..) parmi le flux de tweetsdiffusĂ©s en temps rĂ©el, et de visualiser de façon claire et pertinente, les rĂ©sultats de cette recherche. Cetteapplication devra permettre de crĂ©er un compte pour chaque utilisateur avec une base de donnĂ©es et desrecherches propres Ă  chacun.

Ce projet peut ĂȘtre dĂ©coupĂ© en deux grandes parties. Une premiĂšre partie concernant la rĂ©cupĂ©ration detweets Ă  partir de critĂšres choisis par l’utilisateur, et une seconde partie consistant Ă  prĂ©senter les tweetsrĂ©cupĂ©rĂ©s pour en tirer des informations pertinentes et les prĂ©senter de la façon la plus utile possible.

La premiĂšre Ă©tape consistera donc Ă  mettre au point une interface permettant Ă  l’utilisateur d’entrer lescritĂšres de recherche qu’il souhaite.

7

Page 8: ExtractTweets - LIRMM

La rĂ©cupĂ©ration des tweets nĂ©cessite une communication avec l’API Twitter, ce dialogue sera gĂ©rĂ© parune application mise en place Ă  cet effet et codĂ©e en Java. Une fois les tweets rĂ©cupĂ©rĂ©s, il est importantde pouvoir les stocker.

Comme nous le verrons plus loin, la base de données tient un rÎle central car elle coordonne à la fois lescritÚres de recherche, les informations à récupérer et les résultats à renvoyer.

Figure 2 – Vue gĂ©nĂ©rale des composants du projet ExtractTweets

La figure 2 décrit les différents modules mis en place dans ce projet. Nous allons voir que ces modulessont tous inter-connectés et interagissent à plusieurs niveaux.

1.3 Les principaux éléments en jeu

Afin de mieux comprendre le but et l’utilitĂ© de l’application dĂ©veloppĂ©e, nous avons Ă©tabli un cas d’uti-lisation concret. Nous reviendrons ensuite sur le rĂŽle jouĂ© par chacun des modules prĂ©sentĂ©s sur la figure2.

8

Page 9: ExtractTweets - LIRMM

1.3.1 ScĂ©nario d’utilisation

Un utilisateur souhaite connaĂźtre l’opinion publique Ă  propos de Nicolas Sarkozy en France et faire lacomparaison avec les USA. Il dĂ©cide donc de se servir de l’application que nous avons dĂ©veloppĂ©e. LapremiĂšre Ă©tape est de s’enregistrer sur le site Twitter Developpers afin d’acquĂ©rir les codes d’accĂšs requispour l’interrogation de la base donnĂ©es de Twitter.

Une fois les codes d’accĂšs acquis, l’utilisateur peut maintenant se crĂ©er un compte sur notre applicationen fournissant un login et un mot de passe. Une fois enregistrĂ© dans notre base de donnĂ©es, l’utilisateurpeut lancer une recherche en choisissant l’API REST avec par exemple pour mot-clĂ© Sarkozy et pourgĂ©olocalisation la France. Pour la gĂ©olocalisation, l’utilisateur crĂ©e une “Bounding Box” (zone dĂ©finissantles rĂ©gions du monde) qui sera enregistrĂ©e sur l’interface et pourra ĂȘtre rĂ©utilisĂ©e ultĂ©rieurement. Il peutensuite lancer une deuxiĂšme recherche en changeant uniquement la gĂ©olocalisation qui sera cette fois auxUSA.

Par la suite, l’utilisateur se rend sur l’onglet rĂ©sultats pour observer les recherches lancĂ©es. L’observationdu nuage de mots le renseigne sur la tendance des avis, il peut ainsi comparer les termes les plus utilisĂ©sconcernant Nicolas Sarkozy et se faire une idĂ©e de sa popularitĂ© au sein des Tweeteurs. L’observation desgraphiques peut Ă©galement le renseigner sur l’évolution du nombre de tweets en fonction du temps surce sujet. Il pourra ainsi se rendre compte de l’intĂ©rĂȘt de la population en France comme aux USA, pourNicolas Sarkozy.

Voyons maintenant le rĂŽle de chaque module.

1.3.2 La base de données

La base de donnĂ©es est le pivot central permettant de coordonner les autres Ă©lĂ©ments. En effet, lorsqueles tweets sont rĂ©cupĂ©rĂ©s depuis l’application Twitter, ils sont ensuite insĂ©rĂ©s dans la base de donnĂ©es.Dans un second temps lorsque l’on souhaite consulter les rĂ©sultats d’une recherche, ces rĂ©sultats sontextraits de la base de donnĂ©es.

La base de donnĂ©es doit ĂȘtre pensĂ©e de façon Ă  pouvoir rĂ©pondre aux exigences suivantes :— elle doit permettre de rĂ©aliser suffisamment de recherches possibles pour couvrir les besoins d’uti-

lisateurs diffĂ©rents. En effet, l’application sera utilisĂ©e par diffĂ©rentes Ă©quipes et donc diffĂ©rentsdomaines d’études. Certains travailleront sur les aspects gĂ©olocalisation, d’autres plutĂŽt sur l’évo-lution de l’utilisation de mots-clĂ©s/hashtags, d’autres encore sur les liens following/followed entreutilisateurs de Twitter, etc

— elle doit permettre le stockage d’un maximum d’informations car on ne peut pas faire beaucoupd’hypothùses a priori sur ce qui sera important pour l’utilisateur

1.3.3 L’interface utilisateur

Il s’agit d’une interface Web chargĂ©e de rĂ©cupĂ©rer les choix de l’utilisateur parmi les paramĂštres derecherche Ă  remplir. L’interface doit avoir un graphisme simple et clair permettant une prise en main ra-pide. Pour la partie rĂ©sultats elle doit permettre d’accĂ©der rapidement Ă  diffĂ©rents types d’informations,de classements. Ces informations seront exploitĂ©es Ă  des fins diverses, il faut donc pouvoir s’adapter Ă chaque type de requĂȘtes. L’interface permettra Ă©galement Ă  l’utilisateur de crĂ©er son propre compte et degĂ©rer les recherches associĂ©es Ă  celui-ci.

9

Page 10: ExtractTweets - LIRMM

1.3.4 Le systÚme de récupération et de stockage des tweets

L’objectif ici est de trouver une solution permettant de rĂ©cupĂ©rer toutes les donnĂ©es pouvant ĂȘtreextraites des tweets et les insĂ©rer dans la base de donnĂ©es.Pour combler ce besoin, nous avons rĂ©alisĂ© une application Java utilisant la librairie twitter4j que nousdĂ©crirons plus loin. Cette librairie nous permet, grĂące aux codes d’accĂšs dĂ©livrĂ©s par Twitter, d’accĂ©derau flux continu de tweets diffusĂ©s sur la toile. Le systĂšme doit donc se charger de filtrer ses rĂ©sultats etd’en tirer les informations Ă  stocker dans la base de donnĂ©es.

1.4 Les interactions

Comme le montre la figure n°2 les interactions se font Ă  diffĂ©rents niveaux, que l’on peut voir de maniĂšrechronologique dans le cas gĂ©nĂ©ral :

— Interface utilisateur (cĂŽtĂ© critĂšres) - Base de donnĂ©es— Interface utilisateur (cĂŽtĂ© critĂšres) - SystĂšme de rĂ©cupĂ©ration des tweets— SystĂšme de rĂ©cupĂ©ration (application Java) - Twitter)— SystĂšme de rĂ©cupĂ©ration (application Java) - Base de donnĂ©es— Base de donnĂ©es - Interface utilisateur (cĂŽtĂ© rĂ©sultats)

L’interface utilisateur est la premiĂšre vue en jeu lors de l’utilisation de l’application. Cette derniĂšre doittransmettre les critĂšres sĂ©lectionnĂ©s au systĂšme de rĂ©cupĂ©ration des tweets. Cette transmission se fait Ă l’aide d’un fichier Ă©crit dans un format particulier et contenant l’ensemble des paramĂštres de recherchechoisis par l’utilisateur.

Le systĂšme de rĂ©cupĂ©ration de tweets doit quant Ă  lui communiquer avec Twitter afin de pouvoir rĂ©cupĂ©rerles informations demandĂ©es dans le fichier transmit par l’interface utilisateur. Le systĂšme de rĂ©cupĂ©rations’occupe ensuite du stockage des informations dans la base de donnĂ©es.

Enfin, lorsque l’utilisateur veut voir les rĂ©sultats de sa recherche, l’interface les rĂ©cupĂšre depuis la basede donnĂ©es pour ensuite les prĂ©senter de la façon la plus ergonomique et utile possible.

1.5 Les contraintes

Les contraintes de ce projet rĂ©sident essentiellement dans la multitude des outils utilisĂ©s ce qui aboutitbien souvent Ă  des problĂšmes de compatibilitĂ© parfois difficiles Ă  gĂ©rer. En effet, chacun des modulesprĂ©sentĂ©s sur la figure n°2 nĂ©cessite l’utilisation de langages et d’outils diffĂ©rents. Cependant chacun desmodules est interconnectĂ© avec les autres, il a donc fallu Ă  plusieurs niveaux gĂ©rer ces interactions.

10

Page 11: ExtractTweets - LIRMM

2 Rapport technique

Le rapport technique qui suit vous permettra d’avoir davantage de dĂ©tails quant Ă  la conception del’application. Vous trouver, en complĂ©ment de cette section, un manuel d’utilisation de l’application enannexe K.

2.1 Analyse du projet

2.1.1 Analyse des besoins, analyse du domaine et analyse applicative

Étant la premiĂšre Ă©tape de rĂ©alisation du projet, l’analyse des besoins a Ă©tĂ© dĂ©terminante pour la bonnecomprĂ©hension des enjeux du projet, pour notre organisation, et surtout pour la conception du projet.En effet, cette phase nous a permis de poser les bases de notre projet.

Le projet consistait Ă  mettre en place une plate-forme d’extraction de tweets servant Ă  extraire des tweetsfourni par Twitter et effectuer des statistiques sur les donnĂ©es rĂ©cupĂ©rĂ©es. À l’issue de cette analyse, nousavons effectuĂ© le diagramme de cas d’utilisation et le diagramme de classes UML (qui servira Ă  mettreen place la base de donnĂ©es).

2.1.2 Diagramme de cas d’utilisation

AprĂšs avoir bien compris le sujet du projet, nous avons entamĂ© sa conception par la mise en place denotre diagramme de cas d’utilisation. Celui-ci est reprĂ©sentĂ© par la figure ci-dessous :

Comme vous pouvez le constater sur ce diagramme, l’acteur principal pour notre application est l’uti-lisateur. En effet, il peut :

— S’inscrire— Se connecter— Ajouter un compte “Twitter Developers” en prĂ©cisant les codes d’accĂšs qui serviront pour effectuer

les diffĂ©rentes recherches— Ajouter un compte “Twitter Developers” en prĂ©cisant les codes d’accĂšs qui serviront pour effectuer

les diffĂ©rentes recherches— Effectuer des recherches Ă©tant connectĂ© en prĂ©cisant les mots clĂ©s, hashtag et/ou autres critĂšres,

l’API de recherche ; c’est-Ă -dire l’API Twitter qui servira Ă  la recherche (REST ou STREAMING),le compte « Twitter Developers » et Ă©ventuellement prĂ©ciser le nombre maximum de tweets et/oula plage horaire des tweets pour la recherche

— Consulter les rĂ©sultats des recherches qu’il a effectuĂ©es et s’il le souhaite, afficher la positiongĂ©ographique des tweets qui sont gĂ©olocalisĂ©s.

Les diffĂ©rents types de recherches sont : la recherche de tweets gĂ©olocalisĂ©s et la recherche de tweetsd’un utilisateur (Ă©ventuellement des tweets d’un utilisateur rĂ©pondant Ă  un autre).

11

Page 12: ExtractTweets - LIRMM

Figure 3 – Diagramme de cas d’utilisation

2.1.3 Diagramme UML

À la suite de quelques rĂ©unions entre les membres du groupe et les encadrants, nous avons Ă©tabli undiagramme de classe UML qui a Ă©voluĂ© au cours du dĂ©veloppement du projet. Le diagramme final seprĂ©sente comme suit :

Ce diagramme contient :— Une classe UserApp qui contient les informations sur l’utilisateur— Une classe InfoUserApp qui contient les informations sur les comptes “Twitter Developers” que

l’utilisateur a ajouté— Une classe SearchParameters qui contient les critĂšres de recherche— Les classes Keyword et Hashtag qui sont liĂ©es Ă  la classe SearchParameters car ce sont des

critĂšres de recherche et qui contiennent respectivement les mots clĂ©s et les “hashtags”. Ces classesont Ă©tĂ© mises en place afin d’éviter les duplications. En effet plusieurs recherches peuvent ĂȘtrelancĂ©es avec un mĂȘme mot clĂ©/hashtag (qui sera donc liĂ© Ă  chacune des ces recherches Ă  traversson id)

— Une classe BoundingBox qui contient les informations nĂ©cessaires Ă  la recherche de tweets gĂ©o-localisĂ©s

— Une classe Tweet qui contient les informations nĂ©cessaires d’un tweet— Une classe UserTweet qui est liĂ©e Ă  la classe Tweet car elle contient les informations sur l’utili-

sateur ayant postĂ© le tweet— Une classe Place qui est aussi liĂ©e Ă  la classe Tweet. Elle contient les informations de gĂ©olocalisation

du tweet

12

Page 13: ExtractTweets - LIRMM

Figure 4 – Diagramme UML

2.2 Technologies utilisées

Pour la rĂ©alisation du projet, nous avons dĂ©cidĂ© avec les conseils de nos encadrants d’utiliser les diffĂ©rentsoutils suivants :

Interface Web

— HTML5 : Le HTML5 est le langage utilisĂ© pour la reprĂ©sentation des pages Web. Le HTML5comprend de nouvelles balises et de nouveaux attributs pour les pages Web et ouvre de nouvellespossibilitĂ©s de dĂ©veloppement pour les sites mobiles.

— CSS3 : Le CSS3 est utilisĂ© pour la mise en forme des pages HTML.— Bootstrap : Pour la rĂ©alisation de l’interface utilisateur, nous avons utilisĂ© ce framework CSS

permettant l’utilisation de classes prĂ©dĂ©finies, utilisant nativement JQuery pour crĂ©er par exempledes menus animĂ©s. Cet outil nous a Ă©tĂ© d’une grande aide pour une mise en forme propre et rapideĂ  rĂ©aliser.

— PHP : Du cĂŽtĂ© de l’interface, pour gĂ©rer la connexion et l’envoi des requĂȘtes SQL Ă  la base dedonnĂ©es, nous avons utilisĂ© l’extension Pg (PostgreSql) de PHP.

— JavaScript/JQuery : Pour adapter notre interface dynamiquement selon les choix de l’utilisateurnous avons utilisĂ© la bibliothĂšque JQuery, nous permettant d’accĂ©der Ă  tous les objets du DOM dela page et nous permettant de les manipuler (utilisation autorisĂ©e ou non, adaptation du contenu).

— AJAX : Afin de rester dans notre optique d’une interface dynamique, nous avons utilisĂ© la mĂ©thodeAjax de Javascript (Ă  partir de JQuery) qui permet une communication de maniĂšre asynchroneentre le serveur et la page sans avoir Ă  la recharger.

— Xampp : Ce logiciel d’assistance au dĂ©veloppement de site Web nous permet de tester notre siteWeb contenant du code PHP sans utiliser un serveur distant.

Base de données

— PgAdmin : C’est la plateforme d’administration et de dĂ©veloppement libre la plus populaire etla plus riche pour PostgreSQL. Elle nous permet de gĂ©rer notre base de donnĂ©es.

13

Page 14: ExtractTweets - LIRMM

Application Récupération de tweets

— Java : Pour gĂ©rer la rĂ©cupĂ©ration des tweets et les diffĂ©rentes insertions dans la base de donnĂ©es.

2.3 Conception base de données

Nous avions dĂ©cidĂ© d’utiliser MySQL comme systĂšme de gestion de base de donnĂ©es mais suite Ă quelques contraintes, nous nous sommes redirigĂ©s vers PostgreSQL qui est un systĂšme de gestion de basede donnĂ©es relationnelle et objet (SGBDRO).

Pour la création de la base de données, nous nous sommes basés sur le diagramme de classes UML. Cequi donne un modÚle relationnel qui se présente comme suit :

— UserApp(id_ut, first_name, last_name, login, password, date_of_registration,language)— InfoUserApp(id_iua, consumer_key, consumer_secret, access_token, acces_token_secret, ac-

count_name)— SearchParameters(id_sp, search_title, hour_min, hour_max, search_date, nb_retweet_min,

nb_retweet_max, nb_tweet,user_list, in_reply_to, all_info)— Keyword(id_kw, language, word)— Hashtag(id_ht, hashtag)— BoundingBox(id_bb, title, longitude1, latitude1, longitude2, latitude2, radius, unit, center_longitude,

center_latitude)— Tweet(id_tweet, date_tweet,current_user_retweeted_id, favorite_count, longitude, latitude,

in_reply_to_status_id, in_reply_to_user_id, language, retweeted_count, text,is_retweet, is_retweeted,is_retweeted_by_me, is_truncated, all_info, scope, id_place,user_id)

— Place(id_place, bounding_box_coordinates, geometry_coordinates, bounding_box_type, geo-metry_type, country, fullname, country_code, name, place_type, street_adress, url)

— UserTweet(id_user, created_at,description, favorites_count, followers_count, friend_count, lis-ted_count, location, name, screen_name, is_geo_enabled, is_veridied)

— Location(sp_id, bb_id)— Contain(sp_id, kw_id) : cette relation associe les mots clĂ©s aux recherches— Contain1(sp_id, ht_id) : cette relation associe les hashtags aux recherches. Elle ressemble Ă  la

relation prĂ©cĂ©dente (d’oĂč le nom Contain1).— Search(tweet_id, sp_id)— Search1(iua_id, ut_id, sp_id,process) : cette relation permet de spĂ©cifier qu’un utilisateur ef-

fectue une recherche avec son compte et le compte «Twitter Developers » (d’oĂč le nom Search1).L’attribut “process” contient le pid du processus de l’application java associĂ© Ă  une recherche.

Ce modÚle relationnel a permis de créer les différentes tables de la base de données qui serviront au bonfonctionnement des différentes branches du projet.

14

Page 15: ExtractTweets - LIRMM

2.4 Conception interface

Pour dĂ©buter la conception de l’interface nous avons d’abord rĂ©alisĂ© des maquettes de chaque page Ă l’aide du logiciel de modĂ©lisation balsamiq 2. Plusieurs maquettes ont Ă©tĂ© proposĂ©es, aprĂšs nĂ©gociationsavec nos encadrant nous avons dĂ©cidĂ© de conserver les modĂšles prĂ©sentĂ©s ci-dessous.

Les principales pages de l’application Web sont :

— la page de lancement d’une recherche (cf. figure 5)

Figure 5 – Page de lancement d’une recherche

2. https ://balsamiq.com/

15

Page 16: ExtractTweets - LIRMM

Cette page permettra Ă  l’utilisateur de rentrer les critĂšres de son choix, une fois la sĂ©lection faite, envalidant, une recherche est lancĂ©e et ainsi enregistrĂ©e dans la base de donnĂ©es.

— la page de consultation des rĂ©sultats (cf. figure 6)

Figure 6 – Page affichage des resultats

Cette page doit comprendre l’affichage de toutes les recherches lancĂ©es par l’utilisateur ainsi qu’unevisualisation des rĂ©sultats (tweets) et des outils permettant d’analyser les informations liĂ©es Ă  leur contenupar exemple.

L’objectif principal pour chaque page Ă©tait de centraliser toutes les informations pour avoir un aperçuglobal et pour pouvoir par exemple, pour la page rĂ©sultats, analyser les diffĂ©rentes donnĂ©es et les comparerentre elles.

Avec l’utilisation du framework Bootstrap croisĂ©e avec JQuery, il a Ă©tĂ© possible d’intĂ©grer de nombreusesfonctionnalitĂ©s aussi pratiques qu’esthĂ©tiques. Pour ce qui est de la page de lancement d’une recherche,de nombreuses modifications ont Ă©tĂ© effectuĂ©es au fur et Ă  mesure de l’avancement du projet. En effetcette partie de l’interface est Ă©troitement liĂ©e avec la base de donnĂ©es et l’application Java, plusieurschangements ont donc eu lieu en parallĂšle de l’évolution de ces diffĂ©rents acteurs.

16

Page 17: ExtractTweets - LIRMM

Voici la version finale de la partie lancement de recherche :

Figure 7 – Interface web lancement d’une recherche

Parmi ces fonctionnalitĂ©s, l’utilisation de zones prĂ©dĂ©finies (Bounding Box) pour la gĂ©olocalisation anĂ©cessitĂ© une attention particuliĂšre. En effet, nous avons, pour cet outil, fait appel Ă  la librairie, dĂ©velop-pĂ©e par Google, utilisant GoogleMap qui permet de pouvoir sĂ©lectionner une zone gĂ©ographique de formerectangulaire ou circulaire sur le globe.

Cette zone est définie par ses coordonnées latitudinales et longitudinales, voir figure ci-dessous :

Figure 8 – Interface Web ajout d’une bounding box

17

Page 18: ExtractTweets - LIRMM

Pour ce qui est de la partie rĂ©sultats, comme le montre la figure 9, l’interface s’est complexifiĂ©e du faitde la quantitĂ© d’élĂ©ments Ă  afficher et de l’exploitation des donnĂ©es en sortie. En effet, le but ici est d’avoirun maximum d’informations avec un minimum de manipulations. Le but Ă©tant que les informations soientpresque toutes visibles du premier coup d’Ɠil, et pour celles qui ne le sont pas qu’elles soient accessiblestrĂšs facilement.

Figure 9 – Interface Web partie resultats

Pour cette partie de l’interface, la plus grande difficultĂ© fut la gestion de l’espace. Pour cela nous avonsusĂ© de plusieurs astuces. Par exemple, le panneau latĂ©ral est rĂ©tractable et permet de lister l’ensemble desrecherches lancĂ©es et leur Ă©tat (en cours ou terminĂ©es). De mĂȘme, la partie centrale contient les tweetsrĂ©cupĂ©rĂ©s qui sont classĂ©s par page que l’on peut faire dĂ©filer Ă  notre convenance. Autre exemple, lamise en place d’un nuage de mots permettant de mettre en Ă©vidence les thĂšmes les plus abordĂ©s liĂ©s Ă  larecherche sĂ©lectionnĂ©e. Le graphique quant Ă  lui donne une information pertinente sur la rĂ©partition destweets dans le temps.

2.5 MĂ©canisme global du site

Nous avons dĂ©cidĂ© d’utiliser le pattern MVC (Model View Controller) pour avoir un code clair et bienstructurĂ©. En effet le MVC a pour rĂŽle principal de sĂ©parer la logique du code en 3 parties distinctes :

— Le modĂšle, cette partie gĂšre les donnĂ©es. Son rĂŽle est d’aller rĂ©cupĂ©rer les informations « brutes» dans la base de donnĂ©es, de les organiser et de les assembler pour qu’elles puissent ensuite ĂȘtretraitĂ©es par le contrĂŽleur. On y trouve donc les requĂȘtes SQL.

— La vue, cette partie se concentre sur l’affichage. Elle ne fait presque aucun calcul et se contentede rĂ©cupĂ©rer des variables pour savoir ce qu’elle doit afficher. On y trouve essentiellement du codeHTML mais aussi quelques boucles et conditions PHP trĂšs simples, pour afficher par exemple laliste des recherches d’un utilisateur.

18

Page 19: ExtractTweets - LIRMM

— Le contrĂŽleur , cette partie gĂšre la logique du code qui prend des dĂ©cisions. C’est en quelquessortes l’intermĂ©diaire entre le modĂšle et la vue : le contrĂŽleur va demander au modĂšle les donnĂ©es,les analyser, prendre des dĂ©cisions et renvoyer le texte Ă  afficher Ă  la vue. Le contrĂŽleur contientexclusivement du PHP. C’est notamment lui qui dĂ©termine si le visiteur a le droit de voir la pageou non (gestion des droits d’accĂšs).

Figure 10 – Architecture MVC

Comme l’illustre ce schĂ©ma (figure 10), l’utilisateur s’adresse au contrĂŽleur du site. Le contrĂŽleur vainterroger le modĂšle qui se chargera de lui renvoyer les informations adĂ©quates. Le contrĂŽleur retourneensuite Ă  la vue les informations demandĂ©es par l’utilisateur.

Nous avons Ă©galement dĂ©cidĂ© d’utiliser la programmation orientĂ©e objet en PHP pour tirer parti desavantages qu’elle nous offre tels que l’encapsulation, l’hĂ©ritage . . . Cela permettra lors d’une Ă©volutionfuture de notre site une meilleure gestion du code. En effet, si des fonctionnalitĂ©s doivent ĂȘtre ajoutĂ©es,il suffira de crĂ©er de nouvelles classes qui s’appuieront sur les services communs de classes dĂ©jĂ  prĂ©sentes.

Nous avons donc combiné Architecture MVC et Programmation Objet lors de ce projet.

2.5.1 Structure du site

Le dossier racine du site sera composĂ© de plusieurs dossiers :— Un dossier Models qui comportera tous les fichiers PHP du ou des modĂšle(s) :

— Model.php, qui est une classe abstraite, elle possĂšde l’ensemble des mĂ©thodes permettant laconnexion Ă  la base de donnĂ©es, les mĂ©thodes permettant de prĂ©parer et d’exĂ©cuter des requĂȘtes.

— Search.php extends Model.php possĂšde l’ensemble des requĂȘtes utiles pour rĂ©cupĂ©rer, afficher,modifier et insĂ©rer des recherches.

— BoundingBox.php extends Models.php possĂšde l’ensemble des requĂȘtes utiles pour rĂ©cupĂ©rer,afficher, modifier et insĂ©rer des Bounding Box.

— Tweet.php extends Models.php possĂšde l’ensemble des requĂȘtes utiles pour recuperer les in-formations sur un tweet.

19

Page 20: ExtractTweets - LIRMM

— InfoUserApp.php possĂšde l’ensemble des requĂȘtes utiles pour rĂ©cupĂ©rer, afficher, modifier etinsĂ©rer des informations sur les comptes «Twitter Developers» des utilisateurs.

— UserApp.php possĂšde l’ensemble des requĂȘtes utiles pour rĂ©cupĂ©rer, afficher, modifier et in-sĂ©rer des comptes utilisateur pour l’interface Web.

— Un dossier Controlers pour les fichiers PHP destinĂ©s aux contrĂŽleurs :

— Controler.php qui est une classe abstraite, elle permettra de dĂ©marrer une session php(session_start()), elle possĂšde un attribut qui sera la vue, ainsi qu’une mĂ©thode permettant lagĂ©nĂ©ration d’erreur.

— ControlerUser.php, extends Controler.php, possĂšde l’ensemble des mĂ©thodes utiles pourl’inscription, la connexion et dĂ©connexion d’un utilisateur, Ă©galement pour crĂ©er, afficher etrĂ©cupĂ©rer des recherches dĂ©sirĂ©es par un utilisateur. Ces mĂ©thodes interagissent avec le Modelpour rĂ©cupĂ©rer les donnĂ©es voulues et ensuite les envoyer Ă  la vue de l’utilisateur.

— Un dossier Views pour l’ensemble des vues du site :

— gabarit.php : Regroupe l’ensemble des Ă©lĂ©ments commun Ă  toutes les pages— Vue.php : La classe vue— VueHeader.php : l’entĂȘte du site.— VueResults.php : la vue qui affiche les rĂ©sultats des recherches.— VueRecherche : la vue permettant de crĂ©er des recherches.— VueInscription.php : la vue pour l’inscription d’un utilisateur.

— Un dossier Public contenant les fichiers tels que les feuilles de style CSS, les scripts JavaScripts,les bibliothùques.

— Un dossier SSAFJavaAppli qui contiendra le fichier exĂ©cutable (jar) de l’application Java.

— Un dossier Admin2015 qui contiendra les logs de l’application Java.

— Un fichier config.PHP qui contiendra toutes nos variables globales.

2.5.2 Génération des vues

La gĂ©nĂ©ration des vues se fait grĂące Ă  une factorisation du contenu global des pages. Nous avons ungabarit qui centralise les Ă©lĂ©ments d’affichage communs aux diffĂ©rentes pages, et des variables PHP pourinsĂ©rer des Ă©lĂ©ments spĂ©cifiques tel que le titre de la page par exemple.

Le constructeur de Vue reçoit comme paramĂštre le fichier Vue Ă  utiliser. La mĂ©thode genererFichier()encapsule l’utilisation de require et permet en outre de vĂ©rifier l’existence du fichier vue Ă  afficher. CettemĂ©thode utilise la fonction extract afin que la vue puisse accĂ©der aux variables PHP requises, ces variablessont rassemblĂ©es dans le tableau associatif $donnees (cf. annexe A).

20

Page 21: ExtractTweets - LIRMM

La mĂ©thode generer() a pour rĂŽle principal de gĂ©nĂ©rer la partie spĂ©cifique de la vue afin de dĂ©finir parexemple son titre (attribut $titre) , son contenu ($contenu). Ce mĂ©canisme permet donc d’initialiser legabarit en fonction de l’action demandĂ©e par l’utilisateur.

2.5.3 Traitement des requĂȘtes d’un utilisateur

Toute personne entrant pour la premiĂšre fois sur notre site passe par l’index PHP qui se situe Ă  la racinede notre site. Notre index PHP redirige l’utilisateur vers l’accueil grĂące Ă  l’appel d’une mĂ©thode du Contro-leurUser « afficherAccueil () » header(’location : Controlers/ControleurUser.php ?action=afficherAccueil’) ;

Comment ce contrĂŽleur se charge-t-il de rĂ©cupĂ©rer l’action demandĂ©e par l’utilisateur prĂ©sent sur le site ?

L’action est envoyĂ©e dans l’URL par la mĂ©thode GET, le tableau $_GET est analysĂ© dans notre contrĂŽ-leur (user). Si $_GET[‘action’] est bien dĂ©fini, le contrĂŽleur est instanciĂ©. Il reste maintenant Ă  vĂ©rifierque l’action demandĂ©e existe dans les mĂ©thodes du contrĂŽleur, si elle existe, elle est alors appelĂ©e vianotre instance de contrĂŽleur.

Il arrive d’avoir besoin en plus de l’action, d’un identifiant pouvant reprĂ©senter une recherche ou unutilisateur. Il Ă©tait donc prĂ©fĂ©rable de rĂ©cupĂ©rer cette donnĂ©e via la mĂ©thode GET et de lancer l’action(la mĂ©thode) dans notre contrĂŽleur avec, comme paramĂštre, la donnĂ©e envoyĂ©e par GET, comme le montrele fragment de code suivant (cf. annexe B).

21

Page 22: ExtractTweets - LIRMM

2.5.4 Traitement des requĂȘtes utilisateurs avec AJAX

Pour gérer la communication avec la base de données en AJAX nous avons créé dans notre contrÎleur,les méthodes permettant de récupérer les informations nécessaires aux différentes pages. Ces méthodessont ensuite appelées avec des méthodes javascripts associées.

Pour rĂ©cupĂ©rer les diffĂ©rents critĂšres de recherche et les envoyer Ă  la mĂ©thode PHP qui s’occupe du trai-tement, nous avons dĂ©veloppĂ© deux fonctions javascript :

— une fonction permettant de rĂ©cupĂ©rer les valeurs entrĂ©es dans le formulaire (cf. annexe C)

Les valeurs de chaque champ sont rĂ©cupĂ©rĂ©es en y accĂ©dant grĂące au constructeur d’objet JQuery$(id html de l’objet). Une fois l’objet rĂ©cupĂ©rĂ© on applique dessus la fonction permettant de rĂ©cu-pĂ©rer le contenu $(id html de l’objet).val().

— une fonction utilisant AJAX pour la communication au serveur PHP (cf. annexe D)

Cette fonction utilise la premiÚre pour récupérer les valeurs et communique le tableau résultantainsi que le titre de la recherche à la méthode PHP traitant les données.

La réponse retournée par la méthode PHP est ensuite récupérée pour vérifier si la recherche a bien étécréé ou non.

2.5.5 Communication entre l’interface Web et l’application Java

Nous avons dĂ» trouver une solution pour transmettre les paramĂštres de recherche Ă  l’application Java,nous avons donc dĂ©cidĂ© que la communication entre l’interface Web et l’application java se fera grĂące Ă un fichier JSON qui stockera les paramĂštres d’une recherche d’un utilisateur.

Le choix d’un fichier JSON a Ă©tĂ© le plus judicieux car il sert Ă  faire communiquer des applications dans unenvironnement hĂ©tĂ©rogĂšne. Il est frĂ©quemment utilisĂ© comme langage de transport de donnĂ©es par AJAXet les services Web. Il permet de reprĂ©senter de l’information structurĂ©e.

L’ensemble des critĂšres de recherches Ă©tant prĂ©alablement traitĂ©s et formatĂ©s par le javascript , il estensuite rĂ©ceptionnĂ© par le controlerUser qui se charge d’écrire ces donnĂ©es dans un fichier JSON (cf.annexe E), le fichier a pour nom le titre de la recherche prĂ©fixĂ© par le pseudo de l’utilisateur et suffixĂ© del’extension .JSON. exemple “ login_search1.json”.

Une fois le fichier crĂ©Ă©, l’application Java est lancĂ©e via une fonction qui prend en paramĂštre la ligne decommande de lancement de l’application Java suivie du nom du fichier (cf. annexe F).

Il est important de prĂ©ciser qu’il nous a fallu lancer l’application en mode non bloquant, c’est-Ă -dire nepas attendre la fin de l’application pour pouvoir continuer l’exĂ©cution du code PHP et Javascript. Eneffet lors d’une recherche Streaming, la recherche peut s’étendre sur plusieurs jours, il est donc importantde lancer l’application sans attendre la fin de son exĂ©cution.

Le fichier JSON sert donc de relais entre l’interface et l’application Java. Pour l’étape suivante c’estdonc l’application Java qui se charge de faire le lien avec Twitter.

22

Page 23: ExtractTweets - LIRMM

2.6 Conception application Java

L’application Java a pour but de rĂ©cupĂ©rer Ă  la fois les tweets mais Ă©galement les informations concer-nant les tweeteurs (personnes qui postent les tweets), la gĂ©olocalisation etc. Cependant lorsque les tweetssont rĂ©cupĂ©rĂ©s, ils doivent ĂȘtre “dissĂ©quĂ©s” afin de pouvoir en tirer les informations attendues. En effet,nous avons vu plus haut que la table tweet de la base de donnĂ©es contient de nombreux attributs que nousdevons extraire des tweets. Par exemple, la date du tweet, sa langue, ou encore le nombre de retweets.

23

Page 24: ExtractTweets - LIRMM

2.6.1 UML Application Java

La figure suivante prĂ©sente la structure globale de l’application que nous avons implĂ©mentĂ©e :

Figure 11 – UML application java

2.6.2 ModalitĂ©s d’accĂšs Ă  Twitter

L’application Java que nous avons mise en place a pour but de rĂ©cupĂ©rer des tweets selon des critĂšresdonnĂ©s et d’insĂ©rer ces tweets dans une base de donnĂ©es afin de pouvoir les rĂ©utiliser. Pour avoir accĂšsaux donnĂ©es de Twitter, il faut impĂ©rativement avoir un compte Twitter et enregistrer une applicationsur le site https ://apps.twitter.com/.

24

Page 25: ExtractTweets - LIRMM

Une fois l’application enregistrĂ©e, quatre codes d’accĂšs sont fournis :

— Consumer Key— Consumer Secret— Access Token— Access Token Secret

Ces codes d’accĂšs permettent de pouvoir envoyer des requĂȘtes sur le flux de tweets circulant via uneapplication Twitter et d’avoir des rĂ©sultats conformes Ă  la requĂȘte demandĂ©e.

Il faut maintenant trouver un moyen de mettre en place ces requĂȘtes et les envoyer vers notre application.Pour cela, nous avons utilisĂ© la librairie twitter4j.

2.6.3 Connexion à l’API Twitter avec twitter4j

Différentes API sont fournies et permettent de réaliser des projets, des applications ainsi que des sitesWeb interagissant avec le site Twitter.

Dans le cadre de notre projet, nous avons utilisĂ© :— L’API REST : qui fournit des rĂ©sultats pertinents aux requĂȘtes des utilisateurs Ă  partir d’un cor-

pus restreint de tweets rĂ©cents. Les rĂ©sultats d’une requĂȘte sont fournis instantanĂ©ment et peuventcontenir des tweets dont la date de publication peut ĂȘtre antĂ©rieure (jusqu’à une semaine) Ă  ladate du lancement de la recherche.

— L’API STREAMING : qui permet de rĂ©cupĂ©rer les tweets correspondant Ă  une requĂȘte entemps rĂ©el (au moment oĂč ils sont publiĂ©s), de suivre les tweets d’un utilisateur etc. Les rĂ©sultatsd’une requĂȘte ne contiennent que des tweets publiĂ©s Ă  partir du lancement de cette requĂȘte et tantque la requĂȘte n’est pas stoppĂ©e, des tweets sont fournis.

Il existe pour la plupart des langages de programmation, des librairies telles que twitter4j en Java (quenous avons utilisĂ©e) ou twitcurl en C++, permettant d’utiliser ces diffĂ©rentes API.

Twitter4j est une bibliothĂšque Java qui permet facilement d’intĂ©grer le service Twitter Ă  une applicationJava.

2.6.4 Récupération des tweets

La rĂ©cupĂ©ration des tweets a Ă©tĂ© gĂ©rĂ©e en deux parties distinctes :— La premiĂšre partie consiste Ă  rĂ©cupĂ©rer les diffĂ©rents critĂšres de recherche Ă  travers un fichier au

format JSON crĂ©e Ă  partir de l’interface. En effet ce fichier est parcouru grĂące Ă  la librairie Json-simple disponible sur le site https ://code.google.com/p/json-simple/. Le code suivant (cf. figure12) permet de transformer le fichier JSON en un objet Java de type “JSONObject” qui facilite larĂ©cupĂ©ration des diffĂ©rentes valeurs.

25

Page 26: ExtractTweets - LIRMM

Figure 12 – Parser un fichier Json en un objet java

Les diffĂ©rents critĂšres que nous avons pu gĂ©rer avec l’application sont :— La recherche de tweets avec mots clĂ©s et/ou Hashtags : Ces mots clĂ©s et hashtags sont rĂ©cupĂ©rĂ©s

via le fichier JSON

— Recherche des tweets de diffĂ©rent(s) utilisateur(s) contenant (ou pas) des mots clĂ©s et/ou ha-shtags, rĂ©pondant Ă  un(des) utilisateur(s) : la librairie twitter4j permet de rĂ©cupĂ©rer les tweetsd’un utilisateur soit avec l’API REST (qui fournit au maximum 200 tweets rĂ©cents d’un uti-lisateur), soit avec l’API STREAMING (qui permet de suivre les tweets d’un utilisateur encontinu).

— Recherche de tweets avec gĂ©olocalisation contenant des mots clĂ©s et/ou hashtags : Twitter4Jpermet d’effectuer des requĂȘtes qui fournissent des tweets gĂ©olocalisĂ©s mais elle ne permet pasde rĂ©cupĂ©rer des tweets qui sont gĂ©olocalisĂ©s et qui contiennent des mots clĂ©s spĂ©cifiĂ©s parl’utilisateur. Nous avons donc dĂ» appliquer un traitement supplĂ©mentaire aux rĂ©sultats obte-nus aprĂšs gĂ©olocalisation. Pour ĂȘtre sĂ»r de rĂ©cupĂ©rer des tweets geolocalisĂ©s qui contiennentles mots clĂ©s et hashtags dĂ©finis, nous rĂ©cupĂ©rons les tweets gĂ©olocalisĂ©s et nous effectuons unfiltrage sur les diffĂ©rents mots-clĂ©s ou hashtags.

— En ce qui concerne le filtrage, nous avons mis en place diffĂ©rentes mĂ©thodes qui permettent detester si un tweet contient un mot clĂ©, un hashtag ou si le tweet rĂ©pond Ă  un utilisateur.

— Pour une recherche avec l’API REST, il faut dĂ©finir un cercle avec un centre (longitude etlatitude du centre) et un rayon (cf. figure 13). Tandis que, pour une recherche avec l’APISTREAMING, il faut dĂ©finir un rectangle avec la longitude et la latitude des deux coins op-posĂ©s.

Figure 13 – RĂ©cupĂ©ration tweets gĂ©olocalisĂ©s avec l’API REST

Les requĂȘtes sont diffĂ©rentes d’une API Ă  une autre, il a donc fallu faire une classe pour chacuned’elles ainsi qu’une classe principale dĂ©terminant l’appel Ă  l’une ou l’autre. Chacune des deux APIa donc sa propre classe, ainsi que ses propres mĂ©thodes diffĂ©rentes pour chacun des critĂšres. Deplus, certains critĂšres sont accessibles pour une des API (REST le plus souvent) mais pas pourl’autre. Ce qui rend la tĂąche difficile pour la mise en place de l’interface Web, il fallait que le menuchange en fonction de l’API sĂ©lectionnĂ©e par l’utilisateur.

26

Page 27: ExtractTweets - LIRMM

— La seconde partie concerne l’authentification, c’est-Ă -dire l’enregistrement du compte « TwitterDevelopers » avec lequel les requĂȘtes seront effectuĂ©es. Pour utiliser notre application, l’utilisateurdevra possĂ©der un compte sur « Twitter Developers », ce qui lui permettra d’avoir les codesd’accĂšs nĂ©cessaires au lancement des requĂȘtes. Ces codes d’accĂšs seront ensuite enregistrĂ©s dansnotre base de donnĂ©es. L’application Java se chargera de rĂ©cupĂ©rer ces codes d’accĂšs afin d’effectuerl’authentification pour l’accĂšs au site Twitter.

La figure 14 nous montre comment les codes d’accĂšs sont rĂ©cupĂ©rĂ©s depuis la base de donnĂ©es.

Figure 14 – RĂ©cupĂ©ration des codes d’accĂšs Twitter Developers Ă  partir de la base de donnĂ©es

Voyons maintenant l’authentification du cĂŽtĂ© Twitter, cf figure 15.

Figure 15 – Authentification au service twitter

Un objet ConfigurationBuilder est crĂ©Ă© et nous permet l’accĂšs aux donnĂ©es de Twitter via les codesd’accĂšs. Une fois cette authentification rĂ©alisĂ©e, il est possible de lancer des requĂȘtes.

27

Page 28: ExtractTweets - LIRMM

2.6.5 Connexion et insertion dans la base de données

La connexion Ă  la base de donnĂ©es du cĂŽtĂ© de l’application Java est gĂ©rĂ©e par le driver PostgreSQLJDBC qui est disponible sur le site https ://jdbc.postgresql.org/download.html .

Cette connexion est réalisée de la façon suivante (figure 16) :

Figure 16 – Connexion Ă  la base de donnĂ©es

La fonction getConnection (String url, String user, String password) Ă©tabli une connexion avec la basede donnĂ©es. Elle prend en paramĂštres l’url, l’utilisateur (propriĂ©taire), et le mot de passe de la base dedonnĂ©es. Nous avons mis en place un fichier “config.properties” qui contient les informations nĂ©cessaires(le numĂ©ro de port, l’hĂŽte. . .) pour la connexion Ă  la base de donnĂ©es. La ligne de code SetAutoCommit(false) permet de ne pas valider les transactions automatiquement. Ceci est important car cela permet dene pas insĂ©rer dans la base de donnĂ©es dans le cas oĂč une erreur se produit. Pour valider une transaction,la mĂ©thode Commit() doit ĂȘtre appelĂ©e sur l’instance de la connexion.

Une fois la connexion Ă©tablie, les insertions et les requĂȘtes sont gĂ©rĂ©es par la classe Java java.sql.Statementque l’application emploie pour transmettre des instructions Ă  la base, elle reprĂ©sente une requĂȘte SQL.Cette classe contient les mĂ©thodes suivantes :

— public abstract boolean execute() throws SQLException : qui permet d’exĂ©cuter une re-quĂȘte et renvoie true si l’exĂ©cution renvoie un ResultSet (classe qui symbolise un ensemble derĂ©sultats dans la base de donnĂ©es et autorise l’accĂšs aux rĂ©sultats d’une requĂȘte rangĂ©e par ran-gĂ©e).

— public abstract ResultSet executeQuery() throws SQLException : qui permet aussi d’exĂ©-cuter une requĂȘte et renvoie un ResultSet.

— public abstract int executeUpdate() throws SQLException : qui permet d’exĂ©cuter unemise Ă  jour et renvoie le nombre d’attributs concernĂ©es.

La figure situĂ©e en annexe G montre une requĂȘte sur la table “Tweet” et une insertion dans cette mĂȘmetable.

Les insertions sont gĂ©rĂ©es en fonction des dĂ©pendances entre les tables. Par exemple, lors de la rĂ©cupĂ©-ration d’un tweet, l’insertion dans la table “UserTweet” s’effectue avant l’insertion dans la table “Tweet”parce que la table “Tweet” contient une clĂ© Ă©trangĂšre qui possĂšde une rĂ©fĂ©rence vers l’id de la table“UserTweet”.

Une fois les tweets rĂ©cupĂ©rĂ©s et insĂ©rer correctement dans la base de donnĂ©es, il faut maintenant qu’ilssoient exploitables d’une maniĂšre pratique par l’utilisateur, nous allons voir de quelle maniĂšre cet aspecta Ă©tĂ© mis en place.

28

Page 29: ExtractTweets - LIRMM

2.7 Analyse/Statistiques des tweets

Nous nous situons ici dans la partie rĂ©sultats de l’interface utilisateur. Dans cette partie, la page Webse distingue en trois modules :

— une colonne Ă  gauche pour l’affichage et la gestion des recherches en cours— un module central pour la visualisation de l’ensemble des tweets recueillis— un module droit comprenant des donnĂ©es statistiques

La section du rapport qui suit se consacre au troisiĂšme module de la page de rĂ©sultats et se dĂ©cline endeux types d’élĂ©ments, les nuages de mots et les graphiques.

2.7.1 Nuages de mots

Le premier module mis en place pour étudier le contenu des tweets est un nuage de mots mettant enévidence les mots les plus utilisés dans le contenu récupéré.

Le nuage doit ĂȘtre modulable, pour :— afficher les mots des tweets ayant Ă©tĂ© postĂ©s pendant une pĂ©riode choisie (intervalle de dates)— afficher un nombre limitĂ© de mots dans le cas oĂč le nombre de tweets et donc le nombre de mots

serait Ă©levé— afficher seulement les mots ayant une frĂ©quence comprise dans un intervalle prĂ©dĂ©fini

Plusieurs nuages indĂ©pendants peuvent ĂȘtre ajoutĂ©s pour permettre de comparer diffĂ©rentes configura-tions entre elles.

Pour ce qui est des fonctions utilisĂ©es nous avons dans un premier temps une fonction PHP qui rĂ©cu-pĂšre tous les tweets associĂ©s Ă  une recherche et qui filtre et dĂ©compose leur contenu textuel pour crĂ©erun tableau Ă  deux dimensions [mot, frĂ©quence]. Cette fonction est appelĂ©e par une fonction javascriptutilisant AJAX qui rĂ©cupĂšre le tableau de mots et s’occupe de l’afficher dans le bloc de contenu du module.

Pour l’affichage, nous avons utilisĂ© la librairie tagcloud.js qui, en l’appliquant sur un Ă©lĂ©ment HTMLpossĂ©dant un attribut numĂ©rique donnĂ© (rel="valeur"), redimensionne automatiquement l’élĂ©ment HTMLen fonction de cette valeur. Ici la valeur est donc la frĂ©quence du mot et l’élĂ©ment HTML le bloc contenantle mot <span rel="frĂ©quence">mot</span>.

29

Page 30: ExtractTweets - LIRMM

Figure 17 – Apercu d’un nuage de mots

30

Page 31: ExtractTweets - LIRMM

2.7.2 Évolution du nombre de tweets en fonction du temps

Le second module dĂ©veloppĂ© est un graphique reprĂ©sentant la rĂ©partition des tweets postĂ©s dans letemps. On retrouve dans le module le choix d’un intervalle de date pour analyser une pĂ©riode prĂ©ciseainsi que le choix de l’unitĂ© de temps. Ainsi, il est possible de voir le nombre de tweets postĂ©s chaqueheure ou chaque jour dans l’intervalle choisi. Il est aussi possible d’en ajouter plusieurs sur la page afinde les comparer.

Pour réaliser ce module nous avons utilisé la librairie Chart.js permettant de configurer différents typesde graphique en javascript.

Nous avons en parallĂšle dĂ©veloppĂ© une fonction PHP qui selon l’unitĂ© de temps fournie, calcule avec lecontenu de notre base de donnĂ©es le nombre de tweets postĂ©s Ă  chaque intervalle et retourne un tableau Ă deux dimensions contenant les paires de valeurs [abscisses, ordonnĂ©es]. Ce tableau est rĂ©cupĂ©rĂ© avec unefonction javascript utilisant AJAX qui le transforme pour configurer le graphique crĂ©Ă© avec Chart.js.

31

Page 32: ExtractTweets - LIRMM

Figure 18 – Apercu des graphes de l’évolution du nombre de tweets en fonction du temps

32

Page 33: ExtractTweets - LIRMM

2.8 Idées abandonnées et améliorations envisagées

L’un des avantages que nous avons pour ce projet est qu’il n’est pas figĂ©, et nous permet de resterautonomes et entreprenants sur certains aspects.

Pour l’application Java par exemple, aprĂšs l’étude de toutes les informations que Twitter permet de rĂ©cu-pĂ©rer grĂące Ă  ces deux API (REST et STREAMING) nous avons sĂ©lectionnĂ© les critĂšres nous paraissantpertinents. Nous gardons donc la possibilitĂ© d’ajouter des critĂšres, comme la recherche de tweets par dated’inscription des utilisateurs.

L’interface utilisateur reste le module pour lequel nous avions le plus de libertĂ©s, tout d’abord sur l’outilde conception. L’utilisation de Bootstrap nous a permis de façonner cette interface de maniĂšre pratiqueet plutĂŽt esthĂ©tique. De mĂȘme que pour les critĂšres de recherche il a fallu choisir quelles informationsprĂ©senter. GuidĂ©s par nos encadrants nous avons donc sĂ©lectionnĂ© les informations les plus pertinentes.Cependant nous avions des choix Ă  faire sur la maniĂšre de prĂ©senter ces rĂ©sultats, et de nombreusesamĂ©liorations sont possibles Ă  ce niveau. Pour le nuage de mots par exemple, il pourrait s’accompagnerd’une liste regroupant les mots qu’on ne voudrait pas voir apparaĂźtre. Les mots de ce nuage pourraientĂ©galement ĂȘtre cliquables et permettre leurs visualisations sur le site de Twitter ou encore de lancerautomatiquement une nouvelle recherche basĂ©e sur ces mots.

AprĂšs avoir vu en dĂ©tails l’aspect technique du projet, nous allons explorer le cĂŽtĂ© organisationnel misen place.

33

Page 34: ExtractTweets - LIRMM

3 Rapport d’activitĂ©

Dans cette partie nous abordons diffĂ©rents points autour de l’organisation mise en place pour le projet.Nous parlerons dans un premier temps de la mĂ©thode de gestion de projet gĂ©nĂ©rale utilisĂ©e. Puis, dansun second temps, nous nous attarderons sur la planification prĂ©vue et rĂ©alisĂ©e.

3.1 MĂ©thode de gestion de projet

3.1.1 Présentation de la méthode

La mĂ©thode mise en place pour notre projet s’est construite selon un procĂ©dĂ© qui peut ĂȘtre assimilĂ©aux mĂ©thodes Agiles et plus particuliĂšrement Ă  la mĂ©thode SCRUM. Nous nous sommes en effet servisdes prĂ©ceptes de bases de ces mĂ©thodes sans pour autant en appliquer chaque principe Ă  la lettre.

Nous avons avant tout essayĂ© de privilĂ©gier certaines valeurs telles que :— Les individus et leurs interactions— La collaboration entre dĂ©veloppeurs et commanditaires— L’adaptation au changement

Nous voyons maintenant comment ces concepts ont pu ĂȘtre appliquĂ©s Ă  notre projet.

3.1.2 Bilan d’utilisation

Les méthodes Agiles se basent également sur un principe de développement itératif, dont nous noussommes inspirés, ce qui a permis au groupe de mener le projet de maniÚre assez dynamique et réactive.

Pour ce qui est de la communication entre le groupe et les commanditaires, nous avons privilĂ©giĂ© lesĂ©changes en face Ă  face qui facilitent amplement la comprĂ©hension et l’échange de diffĂ©rents points devue. Nous avons donc mis en place un rendez-vous hebdomadaire Ă  la demande de nos encadrants. LesrĂ©unions se tenaient tous les mercredis et un compte rendu Ă©tait fait lors de chacune des rĂ©unions afin degarder une trace des modifications Ă  faire et des problĂšmes rencontrĂ©s.

Ces entretiens permettaient Ă  l’équipe de mettre en avant les travaux rĂ©alisĂ©s et de les prĂ©senter aux com-manditaires qui par la suite faisaient leurs retours. C’est ainsi, que de nouveaux objectifs s’installaientdans le groupe pour les rĂ©unions suivantes. Cette façon de procĂ©der permettait aux enacdrants d’avoirune meilleure visibilitĂ© sur l’avancement des travaux, de tester les fonctionnalitĂ©s du logiciel au fil de sacrĂ©ation, de dĂ©tecter les risques au plus tĂŽt et d’en faire part.

En plus de ces rĂ©unions avec nos tuteurs, le groupe se rĂ©unissait quelques fois durant la semaine pours’entraider sur les problĂšmes et difficultĂ©s rencontrĂ©s.

La gestion s’est faite au fur et Ă  mesure de l’avancĂ©e du projet. Bien qu’un planning prĂ©visionnel ait Ă©tĂ©rĂ©alisĂ©, il y a eu tout au long du projet des changements auxquels nous avons dĂ» nous conformer pouravancer plus rapidement dans le programme et pouvoir tenir les Ă©chĂ©ances plus facilement.

34

Page 35: ExtractTweets - LIRMM

3.2 Planification

La planification est essentielle dans la gestion d’un projet. Cette planification commence bien souventpar la mise en place d’un planning dit prĂ©visionnel servant Ă  donner une idĂ©e des dĂ©lais Ă  suivre pourles diffĂ©rentes tĂąches. En gĂ©nĂ©ral ce planning fait l’objet de changements au cours du dĂ©veloppement duprojet. VoilĂ  pourquoi nous allons Ă©galement prĂ©senter le planning rĂ©el du projet. Ces plannings ont Ă©tĂ©rĂ©alisĂ©s Ă  l’aide du logiciel OpenProj.

3.2.1 Planning prévu

La figure situĂ©e en annexe H nous permet de voir au mieux l’ensemble des tĂąches prĂ©vues au dĂ©but duprojet.

La figure située en annexe I nous permet de visualiser la répartition des tùches au sein du groupedurant toute la durée du projet.

Dans un souci d’anticipation, le planning indiquait que le dĂ©veloppement devait ĂȘtre terminĂ© dĂ©butmai afin de pouvoir prendre en compte les Ă©ventuels retours et les derniĂšres modifications et ajouts.

3.2.2 Planning réel

La figure situĂ©e en annexe J nous montre le planning rĂ©el, les changements subis sont de naturesdiverses, nĂ©anmoins on peut voir que dans l’ensemble les dĂ©lais Ă©tablis ont Ă©tĂ© respectĂ©s. Cependant, lesdifficultĂ©s rencontrĂ©es notamment au niveau de la connexion PHP – Java, ont pu engendrer un retard surla mise en place de la partie rĂ©sultats de l’interface Web.

35

Page 36: ExtractTweets - LIRMM

Conclusion

GrĂące Ă  la rĂ©alisation du projet ExtractTweet, nous avons appris Ă  aller au bout d’un projet, en respec-tant les objectifs fixĂ©s, dans un temps limitĂ©. Cela nous a Ă©normĂ©ment apportĂ© tant au niveau techniquequ’au niveau du travail d’équipe. Ce projet nous a permis de mettre en pratique les connaissances acquiseslors des enseignements de ces derniĂšres annĂ©es. Il est trĂšs intĂ©ressant pour nous de voir dans quels cadrespeuvent s’intĂ©grer les notions enseignĂ©es.

De plus, l’originalitĂ© du sujet nous a tout de suite plu car le support utilisĂ© (Twitter), est trĂšs populaire.Ce projet nous a permis de connaĂźtre une autre utilisation d’un site que nous connaissons dĂ©jĂ  assez bien.

Concernant l’aspect technique, ce projet a Ă©tĂ© particuliĂšrement enrichissant pour chacun d’entre nousde part la diversitĂ© des outils utilisĂ©s. En effet pour chacun des modules prĂ©sentĂ©s nous avons mis enapplication certains outils dĂ©jĂ  connus, mais nous avons surtout appris Ă  nous familiariser avec de nouvellestechnologies. C’est un point important et trĂšs apprĂ©ciable pour nous car il nous sera trĂšs souvent demandĂ©durant notre future carriĂšre d’ĂȘtre capable de nous adapter Ă  diffĂ©rents supports, outils et technologies.La polyvalence est une des compĂ©tences largement attendue en sortant d’une telle formation. Ainsi, ceprojet nous a amenĂ© Ă  faire preuve d’adaptation notamment par la prise en main rapide des diffĂ©rentsoutils.

Nous avons pu remplir les objectifs fixĂ©s en dĂ©but de projet, cependant Ă  l’issue de ce dernier nousavons pour motivation de continuer Ă  amĂ©liorer la plateforme, notamment la partie Web avec l’ajout decertaines fonctionnalitĂ©s .

36

Page 37: ExtractTweets - LIRMM

Bibliographie/Sitographie

— WikipĂ©dia : http ://fr.wikipedia.org/wiki/Twitter— http ://lewebpedagogique.com/devanssay/files/2014/07/twitexpose.pdf— openClassRooms : http ://openclassrooms.com/— Stackoverflow : http ://stackoverflow.com/— developpez.com : http ://www.developpez.com/

37

Page 38: ExtractTweets - LIRMM

Annexe A - La classe vue (PHP)

<?phpclass Vue{

protected $fichier ; // nom fichier de la vueprotected $titre ; // le titre de la page ;protected $headinfos ; // le bouton inscription dans le cas de qquns non connecter / le ←↩

pseudo dans le cas d ' une personne connectépublic f u n c t i o n __construct ( $action ){

// nom du fichier a partir de l ' action$this−>fichier = ROOT . "/ Views / Vue " . $action . " . php " ;

}

// GénÚre un fichier vue et renvoie le résultat produitf u n c t i o n g e n e r e r F i c h i e r ( $fichier , $donnees ){

i f ( file_exists ( $fichier ) ){

// Rend les Ă©lĂ©ments du tableau $donnees accessibles dans la vueextract ( $donnees ) ;// DĂ©marrage de la t e m p o r i s a t i o n de sortieob_start ( ) ;// Inclut le fichier vue// Son rĂ©sultat est placĂ© dans le tampon de sortierequire $fichier ;// ArrĂȘt de la t e m p o r i s a t i o n et renvoi du tampon de sortier e t u r n ob _ge t_c lea n ( ) ;

}e l s e{

throw new Exception ( " Fichier ' $ f i c h i e r ' introuvable " ) ;}

}

// GénÚre et affiche la vuepublic f u n c t i o n generer ( $donnees ){// Génération de la partie spécifique de la vue

$contenu = $this−>g e n e r e r F i c h i e r ( $this−>fichier , $donnees ) ; // generation du contenu// GĂ©nĂ©ration du gabarit commun utilisant la partie spĂ©cifique

$vue = $this−>g e n e r e r F i c h i e r ( ROOT . ' / Views / gabarit . php ' ,array ( ' t i t r e ' => $this−>titre , ' contenu ' => $contenu ) ) ;

// Renvoi de la vue au navigateurecho $vue ;

}

}

?>

38

Page 39: ExtractTweets - LIRMM

Annexe B - MĂ©canisme de routage de l’action demandĂ©e par l’uti-lisateur (PHP)

<?php

i f ( isset ( $_GET [ " action " ] ) ) // si action est pas vide{

$instance = new C o n t r o l e u r U s e r ( ) ;// on verifie que l ' action / la methode existe

i f ( m e t h o d _ e x i s t s ( $instance , $_GET [ " action " ] ) ){

i f ( isset ( $_GET [ " donnee " ] ) ){

i f ( isset ( $_GET [ " donnee2 " ] ) ){

i f ( isset ( $_GET [ " donnee3 " ] ) ) {$instance−>$_GET [ " action " ] ( $_GET [ " donnee " ] , $_GET [ " donnee2 " ] ,

$_GET [ " donnee3 " ] ) ;}e l s e{

instance−>$_GET [ " action " ] ( $_GET [ " donnee " ] , $_GET [ " donnee2 " ] ) ;}

}e l s e{

$instance−>$_GET [ " action " ] ( $_GET [ " donnee " ] ) ;}

}e l s e{

$instance−>$_GET [ " action " ] ( ) ;}

}e l s e{

$instance−>erreur ( " Cette page n ' existe pas " ) ;exit ( ) ;

}

}?>

39

Page 40: ExtractTweets - LIRMM

Annexe C - Récupération des données du formulaire de recherche(Javascript)

f u n c t i o n g e t _ f o r m _ v a l u e s ( ){var date = new Date ( ) ;var timestamp = new Date ( Date . UTC ( date . getFullYear ( ) , date . getMonth ( ) , date . getDate ( ) , date .←↩

getHours ( ) , date . getMinutes ( ) , date . getSeconds ( ) , date . g e t M i l l i s e c o n d s ( ) ) ) ;

var name = $ ( '#search_name ' ) . val ( ) ;var api ;var nb_results ;var dt ;var hft ;

i f ( $("# use_rest " ) . is ( ' : checked ' ) ) {api = $("# use_rest " ) . val ( ) ;

i f ( $ ( '#date ' ) . val ( ) ! = " " ) { dt = $ ( '#date ' ) . val ( ) }hft = $ ( '#h o u r s _ s l i d e r ' ) . g e t S l i d e r V a l u e s ( ) ;}

e l s e{ // si ce n ' est pas l ' un , c ' est l ' autreapi = $("# u s e _ s t r e a m i n g " ) . val ( ) ;}

i f ( $ ( '#r e s u l t s _ l i m i t ' ) . val ( ) ! = " " ){nb_results = $ ( '#r e s u l t s _ l i m i t ' ) . val ( ) ;}

var lang ;i f ( $ ( '#language ' ) . val ( ) !=" default " ) { lang = $ ( '#language ' ) . val ( ) }var rts ;i f ( $ ( '#r e t w e e t s ' ) . val ( ) !=" default " ){

var tmp = $ ( '#r e t w e e t s ' ) . val ( ) . split ( '− ' ) ;rts = [ ]rts [0 ]= parseInt ( tmp [ 0 ] ) ;rts [1 ]= parseInt ( tmp [ 1 ] ) ;

}

var values ;i f ( name ! = " " ) {values = {

search_name : name ,s e a r c h _ t i m e s t a m p : timestamp ,

API : api ,re sul t_l imi t : nb_results ,compte_API : $ ( '#api_account ' ) . val ( ) ,keywords : lists [ ' keyword_l ist ' ] ,language : lang ,

r e t w e e t s _ f r o m _ t o : rts ,date : dt ,ho ur_ fro m_t o : hft ,answer_to : lists [ ' answer_to_l ist ' ] ,users : lists [ ' u s e r _ l i s t ' ] ,bo und ing _bo x : lists [ ' bounding_box_list ' ]}

}

var json_values = JSON . stringify ( values ) ;r e t u r n json_values ;

}

40

Page 41: ExtractTweets - LIRMM

Annexe D - Envoi des données avec AJAX

f u n c t i o n c r e a t e _ s e a r c h ( ){var new_search = g e t _ f o r m _ v a l u e s ( ) ;var titreRe = $("# search_name " ) . val ( ) ;

i f ( new_search != n u l l ){

$ . ajax ({type : " POST " ,url : " . . / Controlers / C o n t r o l e u r U s e r . php ? action=v a l i d e r R e c h e r c h e " ,data : {search : new_search ,titreR : titreRe} ,e r r o r : f u n c t i o n ( ) { alert ( " erreur ! " ) ; } ,

success : f u n c t i o n ( retour ) {console . l o g ( retour ) ;alert ( retour ) ;location . reload ( ) ;

}}) ;

}e l s e {console . l o g ( " erreur " ) ;}

}

41

Page 42: ExtractTweets - LIRMM

Annexe E - Fonction de validation d’une recherche (PHP)

// Fonction de recherche , cree un fichier avec les paramatres de recherchespublic f u n c t i o n v a l i d e r R e c h e r c h e ( ){

i f ( isset ( $_POST [ ' s ea r c h ' ] ) ) {

$fp = fopen ( ' recherche_ ' . $_POST [ ' t i t r e R ' ] . ' . json ' , 'w ' ) ;f w r i t e ( $fp , $_POST [ ' s ea r ch ' ] ) ;f c l o s e ( $fp ) ;

}$file = ' recherche_ ' . $_POST [ ' t i t r e R ' ] . ' . json ' ;$this−>e x e c I n B a c k g r o u n d ( " java −jar . . / S S A F J a v a A p p l i / JavaApp . jar " . $file ) ;sleep ( 1 ) ;

$ r e s u l t L a u n c h S e a r c h = $this−>search−>e x i s t _ s e a r c h _ t i t l e ( " " . $_POST [ ' t i t r e R ' ] ) ;i f ( $ r e s u l t L a u n c h S e a r c h == true ){

echo " Recherche envoyée " ;}e l s e

echo " Erreur Recherche non envoyĂ©e , veuillez consulter le fichier l o g pour plus d '←↩in for mat io ns " ;

}}

42

Page 43: ExtractTweets - LIRMM

Annexe F - Fonction d’exĂ©cution de l’application Java (PHP)

public f u n c t i o n e x e c I n B a c k g r o u n d ( $cmd ) {i f ( substr ( php_uname ( ) , 0 , 7) == " Windows " ) {pclose ( popen ( " start /B " . $cmd , " r " ) ) ;}e l s e {$hr=popen ( $cmd . " > / dev / n u l l &" ," r " ) ;}}

43

Page 44: ExtractTweets - LIRMM

Annexe G - Une insertion dans la table des tweets (Java)

sql2 = " SELECT ∗ FROM \" tweet \" WHERE id_tweet = ' "+ S t r i n g . valueOf ( s . g e t I d ( ) )+" ' " ;rs = stmt . ex ecu teQ uer y ( sql2 ) ;i f ( ! rs . next ( ) ){sql =" INSERT INTO \" tweet \ " ( id_tweet , date_tweet , current_user_retweet_id , favorite_count ,←↩

longitude , latitude "+ " , in_reply_to_screen_name , in_reply_to_status_id , in_reply_to_user_id ,←↩user_id , lang , retweet_count , text , is_retweet , is_retweeted , i s _ r e t w e e t e d _ b y _ m e "+ " ,←↩is_truncated , scopes , all_info , place_id , i d _ t w e e t _ r e t w e e t e d ) VALUES←↩( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) " ;

smt = connexion . p r e p a r e S t a t e m e n t ( sql ) ;smt . setString ( 1 , String . valueOf ( s . getId ( ) ) ) ;smt . se tTi mes tam p ( 2 , new java . sql . Timestamp ( s . ge tCr eat edA t ( ) . getTime ( ) ) ) ;smt . setLong ( 3 , s . g e t C u r r e n t U s e r R e t w e e t I d ( ) ) ;smt . setInt ( 4 , s . g e t F a v o r i t e C o u n t ( ) ) ;i f ( s . g e t G e o L o c a t i o n ( ) != n u l l ){smt . setDouble ( 5 , s . g e t G e o L o c a t i o n ( ) . ge tLo ngi tud e ( ) ) ;smt . setDouble ( 6 , s . g e t G e o L o c a t i o n ( ) . getLatitude ( ) ) ;}e l s e{smt . setDouble ( 5 , 0) ;smt . setDouble ( 6 , 0) ;}smt . setString ( 7 , s . g e t I n R e p l y T o S c r e e n N a m e ( ) ) ;smt . setString ( 8 , String . valueOf ( s . g e t I n R e p l y T o S t a t u s I d ( ) ) ) ;smt . setLong ( 9 , s . g e t I n R e p l y T o U s e r I d ( ) ) ;smt . setLong (10 , s . getUser ( ) . getId ( ) ) ;smt . setString (11 , s . getLang ( ) ) ;smt . setInt (12 , s . g e t R e t w e e t C o u n t ( ) ) ;smt . setString (13 , s . getText ( ) ) ;smt . setBoolean (14 , s . isRetweet ( ) ) ;smt . setBoolean (15 , s . isRetweeted ( ) ) ;smt . setBoolean (16 , s . i s R e t w e e t e d B y M e ( ) ) ;smt . setBoolean (17 , s . isTruncated ( ) ) ;i f ( s . getScopes ( ) != n u l l )smt . setString (18 , Arrays . toString ( s . getScopes ( ) . getPlaceIds ( ) ) ) ;e l s esmt . setString (18 , n u l l ) ;smt . setString (19 , T w i t t e r O b j e c t F a c t o r y . getRawJSON ( s ) ) ;i f ( s . getPlace ( ) != n u l l )smt . setString (20 , s . getPlace ( ) . getId ( ) ) ;e l s esmt . setString (20 , n u l l ) ;i f ( s . isRetweet ( ) )smt . setString (21 , String . valueOf ( s . g e t R e t w e e t e d S t a t u s ( ) . getId ( ) ) ) ;e l s e {smt . setString (21 , n u l l ) ;}smt . e x e c u t e U p d a t e ( ) ;}

44

Page 45: ExtractTweets - LIRMM

Annexe H - Planning prévisionnel - Liste des tùches

45

Page 46: ExtractTweets - LIRMM

Annexe I - Planning prévisionnel - Attribution des tùches dansle temps

46

Page 47: ExtractTweets - LIRMM

Annexe J - Planning réel

47

Page 48: ExtractTweets - LIRMM

Annexe K - Manuel d’utilisation

1 - Ouverture d’un compte utilisateur

Pour se servir de l’application, l’utilisateur doit crĂ©er un compte. S’il n’est pas dĂ©jĂ  connectĂ© il y estautomatiquement invitĂ©. Tous les champs sont obligatoires avec des contraintes sur certains d’entre eux.

— l’adresse mail doit ĂȘtre correctement formatĂ©e— le mot de passe doit ĂȘtre de six caractĂšres minimum

Une fois inscrit, le formulaire de connexion accessible grĂące au bouton du menu principal permet d’ac-cĂ©der Ă  l’application.

2 - Enregistrement Compte Twitter Developers

Une fois connectĂ©, vous arrivez sur la page de lancement de recherche. Ajoutez un compte TwitterDevelopers avec vos codes d’accĂšs. Pour cela cliquez sur “Ajouter un compte”. Un menu “en accordĂ©on”apparaĂźt dans lequel vous pourrez donner un nom Ă  votre compte et insĂ©rer vos codes d’accĂšs.

48

Page 49: ExtractTweets - LIRMM

Pour avoir un compte “Twitter Developers” cliquez sur ce lien https ://apps.twitter.com/ et enregistrezune application.

3 - CrĂ©ation d’une recherche

Pour créer/lancer une recherche avec des critÚres, vous devez :

— Choisir l’API de recherche (REST pour une recherche de tweets dĂ©jĂ  prĂ©sents dans la base dedonnĂ©es de Twitter ou STREAMING pour une recherche de tweets en temps rĂ©el) et un compte(sachant qu’il est impossible d’avoir deux recherches en cours utilisant le mĂȘme compte)

— Remplir le champ “Titre de la recherche”— Ajouter un ou plusieurs mots clĂ©s et hashtags(mot commençant par #) en saisissant le mot et

en cliquant sur le bouton “+”. Ceci n’est pas obligatoire au cas ou vous recherchez des tweetsgĂ©olocalisĂ©s ou les tweets d’un utilisateur Twitter

— Éventuellement choisir la langue des tweets rĂ©sultants de la recherche ; choisir l’intervalle du nombrede retweets

— Éventuellement choisir (pour une recherche avec l’API REST) la plage horaire et la date minimumdes tweets

49

Page 50: ExtractTweets - LIRMM

— Éventuellement choisir des auteurs, des pseudo auxquels ces auteurs rĂ©pondent

— Ajouter des Bounding Box (zone dĂ©finissant les rĂ©gions du monde) si vous recherchez des tweetsgĂ©olocalisĂ©s en sĂ©lectionnant le nom et en cliquant sur “+”

— Vous pouvez dĂ©finir vos propres Bounding Box. Il suffit de cliquer sur le bouton “Ajouter une boun-ding box”, puis de donner un nom Ă  votre Bounding Box et ensuite de sĂ©lectionner le type (cerclepour les recherches avec l’API REST et rectangle pour les recherches avec l’API STREAMING) etenfin, de cliquer sur la map. Un rectangle ou un cercle que vous pouvez dĂ©limiter apparaĂźt. Cliquersur “ajouter” pour effectuer l’ajout. La figure suivante vous montre un aperçu

50

Page 51: ExtractTweets - LIRMM

— Enfin cliquer sur le bouton “Valider recherche”Un popup apparaĂźt avec “recherche envoyĂ©e” si l’envoi de la recherche a Ă©tĂ© effectuĂ© avec succĂšs.

4 - Visualisation des résultats

Cliquer sur le menu “RĂ©sultats” en haut Ă  droite pour accĂ©der Ă  la page de rĂ©sultats.Sur la gauche de la page de rĂ©sultats se trouve la liste des recherches lancĂ©es.

51

Page 52: ExtractTweets - LIRMM

Le premier menu contient une liste de filtres permettant de n’afficher que les recherche ayant des critĂšresprĂ©cis, ainsi qu’une option de tri (Par date de lancement et/ou par nombres de rĂ©sultats).Un indicateur montre l’état de chaque recherche (terminĂ©e ou en cours) [ 1 ].Le bouton “+” Ă  droite permet d’afficher les dĂ©tails d’une recherche [ 2 ].

Sur la gauche du menu, se trouvent les boutons permettant :— d’exporter les tweets associĂ©s Ă  une recherche [ 3 ]— de stopper ou supprimer une recherche [ 4 ]

Une fois la recherche sélectionnée, différents modules se mettent en place.

Premier module - visualisation des tweets

La partie gauche du contenu de la page affiche les tweets triĂ©s par pages. Il est possible de les affichertous ou de choisir d’afficher seulement les tweets gĂ©olocalisĂ©s [ 1 ].Un lien vers le tweet est disponible [ 2 ].Pour afficher la position du tweet sur le module Google Map, cocher la checkbox [ 3 ].Les boutons associĂ©s au module Google permettent de sĂ©lectionner tous les tweets rĂ©cupĂ©rĂ©s dans larecherche ou seulement les tweets contenus dans la page actuellement affichĂ©e [ 4 ].

52

Page 53: ExtractTweets - LIRMM

DeuxiĂšme module - nuage de mots

Ce module permet d’afficher les mots clĂ©s utilisĂ©s dans les tweets.Les filtres comprennent :

— deux sĂ©lecteurs de dates pour considĂ©rer les tweets postĂ©s au cours d’une pĂ©riode prĂ©cise [ 1 ]— la sĂ©lection d’une plage de frĂ©quences [ 2 ] et une limite d’affichage [ 3 ] pour afficher seulement

une partie des mots

Pour valider les filtres, utiliser le bouton ↓ .Un lien permet d’afficher le nuage de mots complet sur une nouvelle page [ 4 ]. Il est possible d’ajouterplusieurs nuages de mots sur la page Ă  l’aide du bouton “+” situĂ© sous le module.

53

Page 54: ExtractTweets - LIRMM

TroisiÚme module - granularité temporelle

Ce module permet d’afficher une courbe reprĂ©sentant la rĂ©partition des tweets dans le temps.Les filtres comprennent :

— deux sĂ©lecteurs de dates reprĂ©sentant la borne infĂ©rieure et supĂ©rieure de l’axe des abscisses [ 1 ]— la sĂ©lection d’une unitĂ© d’intervalle pour cet axe [ 2 ]

Pour valider les filtres, utiliser le bouton ↓ .Le survol de la courbe avec la souris permet d’afficher la date et le nombre de tweets postĂ©s entre ce pointet l’intervalle prĂ©cĂ©dent. L’ajout de plusieurs graphiques est possible Ă  l’aide du bouton “+” situĂ© sous lemodule.

54