PoutineInput

Chloé v/s Twitter API : Round 2

Publicités

La dernière fois nous avions découvert l’API de Twitter, et avions récupéré nos premiers Tweets.

Aujourd’hui, nous allons expliquer le script permettant de tout faire automatiquement et la documentation pour ce faire se trouve ici. Il s’agit de la partie authentification pour accéder à l’API via un script.
Comme nous l’avions vu la dernière fois, l’API Twitter est protégé par le protocole oAuth, ce qui nécessitait d’avoir des customer key et secret délivrés par Twitter pour y accéder.

Ainsi, la doc Twitter nous donne trois étapes pour nous authentifier sur l’API :
1. Encoder les consumer key et secret en URL encoding (de l’ASCII étendu en sorte), puis concaténer la ckey, un ‘:’ et le csecret en une seule chaine de caractères et enfin encoder cette string en Base64.
2. Faire une requête HTTP POST dont le header (l’en tête) doit contenir les champs « Authorization » et « Content-type » ayant pour valeurs respectives « Basic Ckey:Csecret_encodés_en_base_64 » et « application/x-www-form-urlencoded;charset=UTF-8 », et le body (corps) de la requête doit être « grant_type=client_credentials ». La réponse à cette requête sera un Bearer Token, qui nous servira à nous authentifier lors de nos futures requêtes.
3. Faire la requête avec le champ « Authorization » dans l’en-tête ayant pour valeur « Bearer token_obtenu_dans_l’étape_précédente » (commençant souvent par AAAAAA).

Notre script ressemble donc à ceci :

#!/bin/bash

ckey='******************';
echo $ckey;
csecret='**********************************';
echo $csecret;

# urlencode
#on passe pour l'instant, on y reviendra si Twitter fait des modifications dans le format des ckey/secret

# concatenation et encodage en Base64
code=$(echo -ne "$ckey:$csecret" | base64 --wrap=0);
echo $code;

# envoi de la requete POST pour obtenir le token
curl -v --data "grant_type=client_credentials" https://api.twitter.com/oauth2/token HTTP/1.1 --header "Authorization: Basic <$code>Content-Type: application/x-www-form-urlencoded" > reponse.json;

#requete complete :
# POST /oauth2/token HTTP/1.1
# Host: api.twitter.com
# User-Agent: My Twitter App v1.0.23
# Authorization: Basic (ckey:csecret encodes en base64)Content-Type: application/x-www-form-urlencoded;charset=UTF-8
# Content-Length: 29
# Accept-Encoding: gzip

# grant_type=client_credentials

#requete pour les resultats de recherche

if grep bearer reponse.json; then
echo token trouve;

bearer=$(grep -o "AA*.*\b" reponse.json);
echo $bearer;
curl --get 'https://api.twitter.com/1.1/search/tweets.json' --data 'count=100&lang=en&q=Putin&result_type=recent' --header "Authorization: Bearer $bearer" -v >> resultats_en.txt;
curl --get 'https://api.twitter.com/1.1/search/tweets.json' --data 'count=100&lang=fr&q=Poutine&result_type=recent' --header "Authorization: Bearer $bearer" -v >> resultats_fr.txt;
curl --get 'https://api.twitter.com/1.1/search/tweets.json' --data 'count=100&lang=ru&q=%D0%9F%D1%83%D1%82%D0%B8%D0%BD&result_type=recent' --header "Authorization: Bearer $bearer" -v >> resultats_ru.txt;

else
echo Token non trouve;
fi;

La prochaine étape sera de planifier l’exécution du script sur une certaine période afin d’avoir le plus de données possibles.

 

Publicités

Publicités