LE BIG DATA ET LES RESEAUX SOCIAUX

11 minute read

Published:

Cet article fait un tour d'horizon des outils et services qui permettent d'extraire des données et des mégadonnées des principaux réseaux sociaux (Twitter, Facebook)  , des sites web et des blogs.

 

Introduction

Ces derniers temps, je vois une spécialisation qui prend de l'ampleur, il s'agit du social media mining. Le social media mining est le processus d'obtention de mégadonnées à partir du contenu généré par les utilisateurs sur les sites de médias sociaux et les applications mobiles.

En effet, 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 (https://www.blogdumoderateur.com/50-chiffres-medias-sociaux-2019/). 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.

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...).

 

Twitter

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. (https://developer.twitter.com/en.html). 

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 :

  • extraction (API SearchTweets, API Get Tweets Timelines)
  • 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. 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, avec l’offre 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. (Documentation Twitter Search

 

fetched_tweets = api.search( query = "big data from:@burkinafaso", 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 @burkinafaso contenant le mot clé big data.

 

Get Tweet Timelines et Stream API

 

Twetter propose également des API permettant de récupérer le fil d’actualités, basé sur nos abonnés ou de directement récupérer les 20 derniers tweets d’un utilisateur donné et d'effectuer en temps réel des requêtes données respectivement par Get Tweet API et Stream API.

 

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. Les librairies disponibles ont principalement été développées par la communauté, on en retrouve dans plusieurs langages (liste des librairies).

Personnellement j'aime utilise Python, et Tweepy est l’une des références, c’est une library assez complète et bien documentée.(Tweetpy)

 

Facebook

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 angry.

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.

 

http://blog.ippon.fr/content/images/2019/06/Screenshot_2019-06-13--Blog--Extraire-la-data-des-r-seaux-sociaux-2-.png

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 RochKaborePF (le président du faso); ou en le renseignant lors de votre usage du Facebook SDK (présent dans plusieurs environnements).

 

import urllib3, requests
token = "votretokenici"
page_id = "RochKaborePF"
posts = requests.get("https://graph.facebook.com/"+page_id+"/feed?access_token="+token)

Requête GET à Graph API Facebook

 

Les librairies

 

Au niveau de la limitation, pour une App donnée, on est à 200 requêtes par heure, multipliée par le nombre d’utilisateurs. 

Sache bien comme je le disais au debut, ces limites peuvent être contourné. J'ai developper un algorithmes qui vous permet de recuper librement et sans contrainte de limites toutes les données que vous voulez obtenir sur facebook. Ce code est gratuit est peut etre otenu sur mon compte github (https://github.com/armelsoubeiga/fb_scraping).  N'oublier pas d'aime ce projet s'il a aide.yes

 

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 développés par les mêmes développeurs ni avec les même technologies.

Dans le cadre de la récupération d’articles de blog ou des données sur site web, 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, et le package rvest sous R sont les références. Muni d’une très bonne documentation, ils permettent notamment de localiser et de récupérer directement le texte ou des données entre les balises HTML/XML.

 

Cas d’usage 1: extraire des images

 

Il y'a un mois environs lors un de mes projet (waxclasifier: application de classification des tissus africain déployé sur une application Android) j'ai parcouru plusieurs site web pour récupérer des images.

Comme méthode, pour chaque site il faut comprendre la structure du site et réfléchir sur un scripting pour extraire de façon automatique les données (les liens vers ces images dans ce cas). Ci-dessous un exemple d’applique sur le site https://www.etsy.com/fr/shop/LAGRACEWAX

 

https://armelsoubeiga.pythonanywhere.com/media/uploads/2020/01/23/image.png

Structure du site https://www.etsy.com/

 

library(tidyverse)  
library(rvest)    
library(stringr)   
library(lubridate)
library(tidyr)
url <-'https://www.etsy.com/fr/shop/LAGRACEWAX'
#>>Recuperation des lien vers toutes les pages
get_last_page <- function(html){
  pages_data <- html %>% 
    html_nodes('.wt-action-group__item') %>% 
html_text()    
               
  pages_data[(length(pages_data)-1)] %>%            
    unname() %>% 
    str_extract("[[:digit:]]+") %>%
    as.numeric()                                     
}
latest_page_number <- get_last_page(read_html(url))
urll <- 'https://www.etsy.com/fr/shop/LAGRACEWAX?ref=items-pagination&page='
list_of_pages <- str_c(urll,1:latest_page_number,'&sort_order=custom',sep='')
#>>Recuperation de tous les blocks dans chaque pages
get_block <- function(html){
  html %>% 
    html_nodes('.display-inline-block')%>% 
    html_attr("href") %>%
    na.omit()  %>%
    as.character()
}

 

Vous pouvez également trouve le reste du script et bien sur d’autres sur mon compte github dans le répertoire du projet waxclassifier. 

 

Cas d’usage 2: extraire des données

Dans ce deuxiéme cas d’utilisation il s’agit d’une extraction de données sur des films et séries sur le site torrent9  (https://www.torrent9.pl/) pour une application de système de recommandation de films. Vous trouve le projet également sur mon compte github dans le repertoire movies-space.

 

https://armelsoubeiga.pythonanywhere.com/media/uploads/2020/01/23/capture.PNG

Repertoire du projet movies-space

 

#torrent url
url <-'https://www.torrent9.pl/torrents/films/'

#recuperer toutes les pages
all_url <- str_c(url,seq(51,1551,50),sep='')
all_url <- c(url,all_url)

#recuperer les urls sur une page
get_url_by_page <- function(html){
  url_ <- html %>% 
          html_nodes('table td a ')%>%
          html_attr("href")
  url_ <- paste('https://www.torrent9.pl',url_,sep='')
  return(url_)
}

# Pour chaque activity pour chaque page get chaque entreprise et le lien
get_entreprise_of_each_page <- function(html){
  movie_title <-html %>% 
                  html_nodes('.movie-section .pull-left')%>% 
                  html_text() %>% 
                  str_trim()
  
  movie_category <-html %>% 
                    html_nodes('.movie-information ul>li')%>% 
                    html_text() %>% 
                    str_trim()
  a=data.frame(v1 = movie_category) %>% 
    mutate(v1 = strsplit(as.character(v1), ':'))
  b=read.table(text = gsub("\\s", "", a$v1), 
               strip.white=TRUE, header = FALSE)
  b=b[b!='character(0)']
  movie_info_ <- as.data.frame(matrix(b, ncol = 6, byrow = FALSE), stringsAsFactors = FALSE)
  movie_info <- data.frame(movie_info_[2,])
  colnames(movie_info) <- as.character(movie_info_[1,])
  
  movie_description <-html %>% 
                    html_nodes('.movie-information p')%>% 
                    html_text()
  movie_description <- movie_description[3]
  
  movie <- cbind.data.frame(movie_title,movie_info,movie_description)
  return(movie)
}

 

 

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 cool.

 

Bibliographie

[1]  https://gwu-libraries.github.io/sfm-ui/posts/2018-01-02-facebook

[2]  https://www.lebigdata.fr/reseaux-sociaux-big-data-0811

[3]  https://www.lebigdata.fr/reseaux-sociaux-big-data-0811