Main menu:

Site search

Categories

février 2011
L M M J V S D
 123456
78910111213
14151617181920
21222324252627
28  

Archive

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

Comments

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 […]