Twitter en ligne de commande (même avec oAuth)
Il y a quelque temps, j'avais écrit un billet sur comment envoyer les alertes de votre serveur Nagios sur un compte Twitter (ou comment réunir les SI et le Web 2.0). Malheureusement, depuis cette date, Twitter a changé la méthode d'authentification pour poster des tweets. Ce n'est plus une authentification HTTP classique (qui pouvait donc être facilement faite en ligne de commande avec curl par exemple) mais une authentification oAuth, beaucoup plus souple mais nettement plus complexe.
Nous allons donc dans ce nouveau billet voir comment mettre en place l'authentification oAuth pour un script Python qui permettra à partir d'une simple ligne de commande de mettre à jour une timeline Twitter.
A vos fourneaux !
Les ingrédients...
Pour suivre cette recette il faut:
- un compte Twitter
- la librairie Python python-tweepy
- un navigateur Web (pour enregistrer votre application)
Installation de Python-tweepy
Cette librairie Python va vous permettre de parler oAuth avec le serveur Twitter. Il existe un PPA pour Ubuntu (pour les autres distribution GNU/Linux, il faut installer la bête en suivant ces instructions):
sudo add-apt-repository ppa:chris-lea/python-tweepy
sudo aptitude update && sudo aptitude install python-tweepy
Update: Sous Debian la procédure à suivre est la suivante (merci Benjamin):
apt-get install python python-setuptools python-json python-twitter
wget http://pypi.python.org/packages/source/t/tweepy/tweepy-1.7.1.tar.gz
tar xvfz tweepy-1.7.1.tar.gz
cd tweepy-1.7.1
python ./setup.py install
Enregistrement de votre script
C'est la première étape: déclarer votre application (votre script) sur le serveur Twitter. Dans la suite de ce billet je vais procéder à l'enregistrement d'une application qui s'appellera 'tweetit' (c'est le nom de mon script en ligne de commande qui permettra de mettre à jour ma Timeline).
Pour cela, il faut se rendre à l'URL suivante: http://twitter.com/oauth_clients
Puis cliquer sur Register a new application »
On saisie ensuite le formulaire:
Une fois le formulaire validée, vous devriez être redirigé vers une page contenant deux informations importantes: Consumer key (la clés) et Consumer secret (le mot de passe) de votre application.
Il faut bien sur mettre ces informations de coté.
Connecter votre script à votre compte Twitter
Nous allons utiliser la librairie python-tweepy pour faire cette étape qui ne devra être faite qu'une seule fois lors du développement de votre application.
Le plus simple est de reprendre le script écrit par Jeff Miller sur son blog. On va donc créer un script nommé tweetit-register.py contenant le code suivant (remplacer les codes):
#!/usr/bin/env python
import tweepy
CONSUMER_KEY = 'VOTRE CODE CONSUMER KEY'
CONSUMER_SECRET = 'VOTRE CODE CONSUMER SECRET'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth_url = auth.get_authorization_url()
print 'Please authorize: ' + auth_url
verifier = raw_input('PIN: ').strip()
auth.get_access_token(verifier)
print "ACCESS_KEY = '%s'" % auth.access_token.key
print "ACCESS_SECRET = '%s'" % auth.access_token.secret
On exécute le script:
chmod a+x tweetit-register.py
./tweetit-register.py
Le script va vous afficher une URL et attendre un code PIN:
Please authorize: http://twitter.com/oauth/authorize?oauth_token=Ndddb0DBsjd6PNYccSEtl8vtdYkNsPRCk5joO7djqO8PIN:
On copie l'URL dans un navigateur Web:
On récupère ensuite le code PIN que l'on entre dans notre terminal:
PIN: 0665141
On obtient en retour la clés et le mot de passe d'accès :
ACCESS_KEY = '7707822-TWzha9rf3icVF1h0FhGnaK5q7iLyNIRzHXDY8aagt4'
ACCESS_SECRET = '3dbTcWkU1LIYG4MtwmraausjaoSne5coGbXKOXhDfG0'
Création du script
Voilà (enfin), on peut développer notre application (tweetit.py):
#!/usr/bin/env python
import sys
import tweepy
# Authentification oAuth
CONSUMER_KEY = 'Consumer Key'
CONSUMER_SECRET = 'Consumer Secret'
ACCESS_KEY = 'Access Key'
ACCESS_SECRET = 'Access Secret'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
# Main program
api.update_status(sys.argv[1])
On rend le script executable:
chmod a+x tweetit.py
Test de l'application
On lance le script avec le texte à tweeter:
./tweetitcli.py 'Petit test depuis la ligne de commande Linux...'
Et voilà le travail:
Et voila, bientôt un prochain billet pour voir comment intégrer ce nouveau script à Nagios
Source pour la rédaction de cet article: