Cet article fait un tour d’horizon des outils et services qui permettent d’extraire les publications provenant de Twitter, Facebook et des blogs.
Introduction : quelles données ?
Les réseaux sociaux sont des plateformes numériques incontournables. En 2019, sur 7,6 milliards d’habitants, on note 3,4 milliards d’utilisateurs de réseaux sociaux (source).
Aujourd’hui les membres de ces réseaux partagent leurs propres occupations quotidiennes, mais aussi leurs avis sur des sujets d’actualité, culturels, ou encore politiques. Ainsi, Twitter, Facebook et autres Instagram, sont devenus des sources importantes d’informations. Ils permettent de jauger en quelques clics et lectures de commentaires l’état de l’opinion publique sur un sujet donné. Les sociétés utilisent également ces plateformes comme de puissants outils de communication, que ce soit pour accroître leur notoriété ou encore alimenter l'esprit de leur communauté.
En bref, des quantités immenses de données sont générées à chaque instant par le biais de ces réseaux. Cela illustre parfaitement les V de la Big Data, en effet, ces données, en plus d’être volumineuses, sont variées. Elles contiennent bien sûr le contenu des publications, suivis par différents indices de popularités et d’impressions (vues, likes, partages etc.), et par une multitude de métadonnées.
Cette data est une véritable mine à exploiter ; selon l’approche elle peut être utilisée pour répondre à différents besoins (jauge de popularité, analyse d’opinion, système de recommandation, ciblage...).
Les sociétés gérantes de ces réseaux ont bien compris la nécessité de fournir des services permettant d’extraire les données générées, et proposent parfois même des outils managés d’exploitation et de traitement de ces dernières (Twitter Analytics, Facebook Business Manager…).
Dans cet article, nous nous concentrons sur les outils d’extraction permettant de collecter les publications provenant de Twitter, Facebook et des blogs.
Twitter, un service complet et pour tous les goûts
Twitter met en oeuvre plusieurs plateformes (APIs REST), qui prennent en paramètre une requête et renvoient une réponse au format JSON. Le tout est accessible selon trois offres : STANDARD (gratuit), ENTERPRISE et PREMIUM.
Dans chaque API, il est proposé plusieurs endpoints. Il en existe assez pour répondre à énormément de cas d’utilisation (stream, publier des tweets, récupérer les tendances etc.). Dans cet article, je vous présente rapidement les outils permettant :
- d’extraire (API Search Tweets, API Get Tweets Timelines)
- de streamer (Filter Realtime Tweets)
Pour pouvoir utiliser ces offres, il vous faudra d’abord suivre une procédure de création d’une App. Twitter vous demandera notamment de renseigner à quelles fins vous souhaitez utiliser leurs services, et, si tout va bien, cela vous permettra de récupérer vos clés secrètes (4 tokens API ).
API Search Tweets
Si votre but est d’extraire des publications selon une recherche particulière, c’est-à-dire selon un ou plusieurs mots-clés, selon des hashtags/noms d’utilisateur ou encore sur une période donnée ; l’API Search est celle qu’il vous faut. Elle prend une requête de recherche et renvoie un JSON avec les données des publications correspondantes.
Pour chaque publication, l’objet retourné contient un panel exhaustif d’informations. Outre le contenu du tweet, on retrouve diverses précisions sur l’auteur, la localisation, l’appareil utilisé pour la publication, sur le nombre de retweets/likes/abonnés, les mentions, les hashtags, les médias contenus et plus encore.
Concernant les limitations, celles-ci sont plutôt raisonnables. Avec l’offre STANDARD (gratuite), il est possible d’effectuer jusqu’à 400 requêtes sur une fenêtre de 15 minutes. Sachant qu’une requête renvoie 100 publications maximum. Outre le nombre de requêtes maximum, la différence entre le service STANDARD et PREMIUM se trouve dans l’accès aux anciens tweets. L’offre gratuite ne permet de récupérer que les tweets récents (date de publication inférieure à 7 jours) alors que la version payante donne accès aux publications depuis 2006. A noter aussi que la recherche de l’offre gratuite n’est pas entièrement fidèle ni exhaustive, elle peut ignorer des tweets qu’elle ne considère pas pertinents.
Avec une bonne utilisation des paramètres et de l’outil (mise en cache, curseur de page etc.), on est quand même capable d’extraire gratuitement des informations sur des milliers de tweets en un temps record.
fetched_tweets = api.search( query = "big data from:ippontech",
count = 100,
result_type="recent")
Exemple d’utilisation de l’API Search sous Tweepy. La requête retourne les tweets les plus récents provenant du compte @ippontech contenant le mot clé big data.
Get Tweet Timelines
L’API Timelines permet notamment de récupérer le fil d’actualités, basé sur nos abonnements ou de directement récupérer les 20 derniers tweets d’un utilisateur donné.
Stream API (Filter realtime Tweets)
Twitter propose également un service de stream en temps réel sur une requête donnée.
-> Doc Stream
Les librairies
On peut vite se perdre parmi toutes les fonctionnalités proposées par Twitter. En effet, plus d’une dizaine d’APIs Twitter sont disponibles, avec chacune plusieurs endpoints. Heureusement, il existe des librairies les regroupant, et simplifiant leur utilisation par le biais de méthodes. Les librairies disponibles ont principalement été développées par la communauté, on en retrouve dans plusieurs langages (liste des librairies ici).
Sur Python, Tweepy est l’une des références, c’est une library assez complète et bien documentée. Elle permet la plupart des cas d’usages (stream, publication, recherche, etc.).
-> Doc Tweepy
Facebook, un service en demi-teinte
Pour récupérer des données Facebook, vous allez d’une façon ou une autre passer par le service phare : Facebook Graph API.
Facebook est par excellence le géant des réseaux sociaux (+ de 2 milliards d’utilisateurs actifs contre 320 millions pour Twitter). Il est pourtant surprenant de noter que sa plateforme de services est moins populaire que celle de Twitter. Cela s’explique par plusieurs raisons :
- Sur Facebook, les données sont protégées (en théorie...), dans le sens où il y a beaucoup plus de notions de publications, groupes, et profils privés que sur Twitter, où la grande majorité des tweets est publique. L’accès aux données est donc davantage contrôlé ;
- Là où Twitter se concentre autour… des tweets, Facebook lui, propose plusieurs services de communication et de partage (videos, groupes, pages, etc.). Ce qui complique conceptuellement la donnée ;
- La documentation de Graph API gagnerait à être plus claire et mieux organisée.
Le service requiert ainsi un nombre conséquent d'autorisations (pour une requête cela peut même atteindre une vingtaine d’autorisations) et d’usage de tokens, ce qui peut être déroutant au premier abord.
Obtenir un token
- Se connecter avec un compte facebook sur developers.facebook.com,
- Créer une App,
- Allez ensuite sur la console Explorer en sélectionnant votre App,
- Demander un user access token (token d’accès utilisateur), puis sélectionner les autorisations qui conviennent à votre utilisation.
Sachez que certains endpoints ne sont accessibles que si votre token contient les autorisations adéquates. Vous pouvez retrouver leur détail ici.
Fenêtre de sélection des autorisations afin de générer un token
Ensuite vous pouvez utiliser votre token de la façon qui vous va le mieux :
- que ce soit par l’usage de requêtes classiques à l’API Rest de Graph, comme sur la requête ci-dessous qui récupère le feed de la page Ippon Technologies ;
- ou en le renseignant lors de votre usage du Facebook SDK (présent dans plusieurs environnements).
import urllib3, requests
token = "votretokenici"
page_id = "ippon.technologies"
posts = requests.get("https://graph.facebook.com/"+page_id+"/feed?access_token="+token)
Requête GET à Graph API Facebook
Limitation
Au niveau de la limitation, pour une App donnée, on est à 200 requêtes par heure, multipliée par le nombre d’utilisateurs.
-> Plus d’infos
Les articles de blogs/presse
Scraping
L’extraction de données de blog diffère de celle des réseaux sociaux, car évidemment les blogs ne sont pas fournis par un seul et même service (WordPress, Wix, etc.).
Dans le cadre de la récupération d’articles de blog, on va parler de scraping. C’est le terme pour désigner la récupération du contenu d’un site web de manière automatisée. Néanmoins, il ne faut pas oublier que les articles de blogs font partie des propriétés intellectuelles, et selon l’utilisation faite des données scrapées, cela peut entrer en conflit avec la législation du pays en vigueur, ou du moins avec la volonté de l’auteur.
Il existe des services ready-to-use pour scraper des blogs et sites en général. Les produits payants (APIFY, SCRAPERAPI), permettent notamment d’esquiver le ban de l’adresse IP, chose courante dans le cadre d’un scraping massif et régulier.
Au niveau des solutions open source, le framework Scrapy, sous un environnement Python, est l’une des références. Muni d’une très bonne documentation, il permet notamment de localiser et de récupérer directement le texte entre les balises HTML/XML (en lui fournissant un lien vers un flux RSS, que vous pouvez facilement trouver sur tous les blogs). Il permet donc de récupérer directement les infos que l’on souhaite, et même de les formater selon notre besoin, pour en extraire un fichier JSON, par exemple.
Cas d’usage : extraire et transformer les flux RSS avec Scrapy
Ci-dessous un exemple de spider (= job scrapy) que j’ai codé pour extraire les données d’une liste de flux RSS. La méthode parse_node va tout simplement parcourir chaque noeud item du flux puis en extraire les balises qui nous intéressent.
# Lancer le script avec : scrapy crawl myspider.py -o data.json
import scrapy
class Article(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
description = scrapy.Field()
pubDate = scrapy.Field()
category = scrapy.Field()
content = scrapy.Field()
author = scrapy.Field()
class Spider(scrapy.spiders.XMLFeedSpider):
name = "SpiderRSS"
start_urls = [
"http://blog.ippon.fr/feed",
"https://fr.blog.businessdecision.com/feed/",
"http://feeds.feedburner.com/AmazonWebServicesBlog"
]
def parse_node(self, response, node):
ns = {'dc': 'http://purl.org/dc/elements/1.1/',
'content': 'http://purl.org/rss/1.0/modules/content/'}
item = Article()
item['title'] = node.xpath('title/text()').extract_first()
item['link'] = node.xpath('link/text()').extract_first()
item['pubDate'] = node.xpath('pubDate/text()').extract_first()
item['description'] = node.xpath('description/text()').extract_first()
item['category'] = node.xpath('category/text()').extract()
item['author'] = node.xpath('//dc:creator/text()', ns).extract_first()
item['content'] = node.xpath('//content:encoded/text()',ns).extract_first()
yield item
Extrait du résultat du script en JSON
Solutions multi-médias
Il y a plusieurs solutions pour récupérer, en une seule fois, un panel de réseaux sociaux. Elles sont généralement payantes et destinées à des fins marketings, comme Twine Social Media ou Scraping Expert.
On peut trouver également des librairies et modules regroupant plusieurs plateformes, comme SocialReaper sur Python, qui scrapent Facebook, Twitter, Reddit, Youtube, Pinterest, et Tumblr à condition de fournir les clés qui vont bien.
On peut également citer la solution Hootsuite, très prisée par les services de communication des entreprises pour avoir la main sur un ensemble de plateformes. Les API ouvertes par Hootsuite sont surtout utiles pour publier sur les réseaux, mais elles proposent aussi un service d’iframe pour afficher les publications sur vos sites web.
Conclusion
En conclusion, il existe plusieurs services pour récupérer la donnée de nos chers réseaux sociaux. Il faut cependant faire attention à bien cibler son besoin, afin de choisir une solution qui lui corresponde, tant au niveau des limitations qu’au niveau des tarifs qui suivent.
Il est conseillé de bien lire la documentation des services prêts à l’emploi, qui peuvent parfois être tricky. Certains vendent seulement une agrégation d’outils open-source ou d’appels aux APIs sources, ce qui ne vaut pas forcément le coût.
Sources/Liens utiles
-> Toutes les documentations citées dans l’article
-> Qu’est ce que robots.txt ? (des infos sur les robots.txt, non abordés dans cet article mais incontournables du scraping)
-> Twitter, 40 chiffres à connaître en 2018
-> How to use Facebook Graph API and extract data using Python!
-> Collecting Facebook data with the Graph API
->[Dossier] Réseaux sociaux : comment tirer profit du Social Big Data