Utiliser Twitter dans une application
Il est assez facile de créer un petit script ou d’inclure dans une application la possibilité d’envoyer un message sur Twitter même si depuis quelques mois Twitter impose un système d’authentification plus compliqué que la simple identification par identificateur/mot-de-passe utilisée précédemment. OAuth est un système d’identification qui repose, pour schématiser, sur un système de clef publique et de clef privée. Il faut que l’application qui va utiliser Twitter soit enregistrée et autorisée par Twitter. De même, il faut que le titulaire du compte Twitter, que l’application va utiliser, ait donné son autorisation. Ce n’est que dans ce cas que l’application recevra le token nécessaire à l’accès au compte Twitter.
Il existe plusieurs modules python permettant d’utiliser Twitter. Par exemple python-tweepy ou python-twitter. C’est ce module-là que je vais utiliser pour l’avoir déjà tester dans le passé lorsque Twitter n’utilisait que la simple authentification. Jusqu’il y a peu, ce dernier module n’était pas compatible OAuth. La mise à jour vers OAuth ayant été faite récemment, la version utilisant OAuth n’est pas encore dans les dépôts. Il va donc falloir l’installer manuellement à partir des sources et penser à installer dans la foulée ses dépendances.
Installation de python-twitter
Pour fonctionner, python-twitter a besoin des paquets suivants: python-simplejson et python-httplib2 qu’il suffit d’installer de la manière habituelle puisque ces paquets sont dans les dépôts:
$ sudo aptitude install python-simplejson python-httplib2
Il faut aussi installer python-oauth2 qui est le module permettant d’utiliser ce mécanisme d’authentification et sur lequel repose python-twitter. Ce module n’est malheureusement pas disponible dans le dépôts mais il existe néanmoins un ppa offrant la version voulue:
$ sudo add-apt-repository ppa:chris-lea/python-oauth2 $ sudo aptitude update $ sudo aptitude install python-oauth2
Python-twitter lui-même est à télécharger sur le site http://code.google.com/p/python-twitter/.
La dernière version est la 0.8.1.
Décompressez et désarchivez le fichier. Rendez-vous dans le répertoire désarchivé puis tapez les commandes suivantes pour installer python-twitter:
$ python setup.py build $ sudo python setup.py install
Vous avez maintenant tous les outils nécessaires pour utiliser Twitter depuis une application en python.
Enregistrer l’application sur le site de twitter
Une des obligations imposées par Twitter est d’enregistrer son application. Pour cela, vous devez posséder un compte Twitter et vous rendre à cette adresse: http://twitter.com/oauth_clients. Remplissez-y le formulaire en faisant attention de bien mettre Client dans le champ Application Type et mettre le Default Access Type en read/write si vous désirez pouvoir envoyer des tweets depuis votre application. En retour, Twitter vous donnera les renseignements suivants qui vous seront nécessaires pour la suite:
API key Zst******************* Consumer key Zst******************* Consumer secret miX************************************** Request token URL https://api.twitter.com/oauth/request_token Access token URL https://api.twitter.com/oauth/access_token Authorize URL https://api.twitter.com/oauth/authorize
Obtenir les autorisations nécessaires
La première fois que l’application tente de se connecter à un compte Twitter, il faut préalablement réclamer un code PIN à l’adresse Request Token URL reçue à l’étape précédente puis avec ce code PIN visiter la page Authorize URL. Ce n’est qu’à ce moment qu’on peut réclamer la Token Key et le Token Secret via l’Access Token URL indispensable pour accéder au compte Twitter.
Pour cela, j’ai écrit un petit script en python très largement inspiré de celui trouvable à cette adresse:
http://code.google.com/p/python-twitter/source/browse/get_access_token.py
Ce script se connecte à l’adresse Request token URL reçue lors de l’enregistrement de l’application sur le site de Twitter et, en donnant la Consumer key et le Consumer Secret, on obtient le Request Token Key et le Request Token Secret. Ces deux tokens serviront à créer une URL où vous devrez vous rendre pour obtenir un code PIN.
Enfin, ce code PIN, une fois introduit dans le script, vous donnera l’Access Token Key et l’Access Token Secret que votre application doit utiliser pour accéder au compte Twitter.
Ouf! Qui a dit que le mécanisme d’authentification OAuth était compliqué ?
import os import sys import urlparse import oauth # Clef et Secret obtenus lors de l'enregistrement de l'application consumer_key = "Zs*********************" consumer_secret = "miX*************************************" oauth_consumer = oauth2.Consumer(key=consumer_key, secret=consumer_secret) oauth_client = oauth2.Client(oauth_consumer) resp, content = oauth_client.request("https://api.twitter.com/oauth/request_token", 'POST') if resp['status'] != '200': print 'Invalid response from Twitter requesting temp token: %s' % resp['status'] else: request_token = dict(urlparse.parse_qsl(content)) print 'Please visit' print '%s?oauth_token=%s' % ("https://api.twitter.com/oauth/authorize", request_token['oauth_token']) # A ce stade, vous devez visiter le site à l'adresse indiquée pour recevoir le code PIN # nécessaire au stade suivant. pincode = raw_input('Pincode? ') token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) token.set_verifier(pincode) oauth_client = oauth.Client(oauth_consumer, token) resp, content = oauth_client.request('https://api.twitter.com/oauth/access_token', method='POST', body='oauth_verifier=%s' % pincode) access_token = dict(urlparse.parse_qsl(content)) # Avec le code pin que vous avez introduit, Twitter vous donne un Access Token Key et # un Access Token Secret qui devront être utiliser dans python-twitter. if resp['status'] != '200': print 'The request for a Token did not succeed: %s' % resp['status'] print access_token else: print 'Your Twitter Access Token key: %s' % access_token['oauth_token'] print ' Access Token secret: %s' % access_token['oauth_token_secret']
Voici ce qui doit apparaître dans le terminal au lancement du script:
Please visit https://api.twitter.com/oauth/authorize?oauth_token=fQb************************************* Pincode? 0595314 Your Twitter Access Token key: 24*******-0gd************************************** Access Token secret: 1uX*********************************************
Envoyer un message sur Twitter
Maintenant qu’on possède toutes les autorisations nécessaires, on peut tweeter un message en utilisant python-twitter. Le code, ci-dessous, utilise la Consumer Key, le Consumer Secret, l’Access Token Key et l’Access Token Secret pour se connecter à Twitter via la classe Api du module. On vérifie, avec VerifyCredentials() que l’on dispose bien des droits indispensables et ensuite on envoie notre tweet sur le compte avec PostUpdate().
import twitter consumer_key = "Zst*******************" consumer_secret = "miX***************************************" access_token_key = "241******-0gd*************************************" access_token_secret = "1uX**************************************" api = twitter.Api(consumer_key, consumer_secret, access_token_key, access_token_secret) resp = api.VerifyCredentials() if resp == None: print 'Error verifying credentials' else: resp = api.PostUpdate('My first twitter message using python')
La classe Api du module python-twitter permet bien sûr de faire bien plus que simplement envoyer un simple tweet. Vous pouvez lire la timeline du compte, gérer vos abonnements et vos abonnés, créer des listes etc… Pour connaitre toutes les possibilités, tapez:
$ pydoc twitter.Api
pydoc affichera, à l’instar des pages de man, toutes les fonctions et la doc relative à la classe Api de python-twitter.
Références
http://code.google.com/p/python-twitter/
http://dev.twitter.com/doc
http://code.google.com/p/python-twitter/source/browse/get_access_token.py
Posted: février 6th, 2011 under python, Ubuntu.
Comments: 1
Tweet
Pingback from Tweets that mention Utiliser Twitter dans une application | Autour de Linux — Topsy.com
Time: 6 février 2011, 19 h 50 min
[…] This post was mentioned on Twitter by Michel Leunen, Michel Leunen. Michel Leunen said: Sur le blog: Utiliser Twitter dans une application en python http://linux.leunen.com/?p=1038 #twitter #python @michelleunen […]