{"word_count": 559, "character_count": 3879}
L'API search de Twitter permet d'interroger les dernières publications actives répondant à une requête pour une plage maximale d'une semaine. Cela signifie, que les publications les plus anciennes auxquelles on peut accéder ont été rediffusées (retweets) 7 jours avant la requête... Cela réduit les possibilités d'une collection historique systématique.L'accès aux publications anciennes, sans avoir recours aux offres commerciales (premium et entreprise) est cependant possible au moyen de la recherche avancée dans Twitter. Collecter les résultats de recherche implique alors d'adopter les techniques du Web-scraping.Ce changement de technique ouvre la possibilité d'une collecte historique mais avec un appauvrissement de la représentation des tweets (cf. ci-après).GetOldTweets3.La collecte est ici proposée selon un ensemble de critères de recherche susceptibles de répondre aux besoins. Dans une perspective de collecte, "exhaustive", nous retiendrons : la collecte entre deux dates (since, until), et la définition d'une équation de recherche.D'un point de vue technique, ce module de collecte utilise urllib.request comme mécanisme de chargement de pages. C'est une solution simple qui permet de dialoguer selon le protocole HTTP afin d'ouvrir une URL. Cela convient pour des sollicitations peu intensives auprès de plateformes faiblement sécurisées. Dans ce cas, la réponse (JSON) de la sollicitation contient la page HTML.La page pouvant être longue, elle est collectée par empans successifs d'une centaine de réponses (ajustable). La sollicitation du serveur est ainsi répétée jusqu'à ce que l'un des critères d'arrêt soit atteint ou qu'il n'y ait plus de réponse.Chaque page de résultats est parcourue à l'aide de PyQuery qui implémente les fonctionnalités de JQuery en python. Autrement dit, la possibilité de parcourir des branches de l'arborescence XML et de sélectionner des éléments de contenus.Ainsi, les différentes informations constitutives du tweet sont extraites et agrégées dans une structure de données comportant les champs suivants :id (str)permalink (str)username (str)to (str)text (str)date (datetime) in UTCretweets (int)favorites (int)mentions (str)hashtags (str)geo (str)# remarque : pas de user_idLa représentation finalisée du tweet est ajoutée à une liste qui est retournée comme résultat de la collecte.Ce module mérite attention. Cependant, dans le cadre de nos travaux, plusieurs lacunes apparaissent :des erreurs peuvent survenir à l'occasion de l'exécution, dont l'origine est probablement en lien avec urllib.request;la délivrance en fin de collecte des résultats de recherche et non au fil de l'eau conduit à une perte sèche du résultat en cas d'erreur...TweetScraper.Une alternative qui correspond mieux à l'approche que nous avons. Elle repose sur l'utilisation de Scrapy comme moteur de collecte. La sauvegarde des données est aussi conforme à nos pratiques puisqu'elle met en oeuvre une base de données Mongodb via PyMongo.De ce point de vue, le code est totalement évident pour qui utilise Scrapy. On trouve ainsi les principaux fichiers : items.py (description des modèles) et pipelines.py (processus d'enregistrement des données. ici deux pipelines : Mongodb et MySQL).Par construction (scrapy) les tweets sont énumérés et peuvent donc être enregistrés à la suite les uns des autres.La structure de données d'un tweet est précisée dans le fichier items. Elle met en oeuvre une représentation distincte des personnes (User). Elle est plus complète que dans GOT3, mais reste limitée.L'intégration dans MédiaSwell de fonctionnalités de rétro-collectes nous a incité à encapsuler la fonction de scraping afin de la monitorer et de la piloter depuis un contrôleur de collecte opérant sur un agenda et sur un fichier de requêtes. Un exemple de collection dans MediaSwell correspondant au hashtag #Guillotine2020 (langue: fr) [OTScraper]