diumenge, 17 d’octubre de 2010

Amarok to Twitter

Ja feia dies que em rondava per el cap, la idea de trobar un script o programa per enviar un tweet amb l'informació de la peça en reproducció al Amarok. Al amarok hi ha un que es diu Wolfbird, nomès te una pega que no funciona amb OAuth.
Cercant, cercant he decidit ferme-n un amb python. He provat varies llibreries de python per la Api de OAuth i cap funcionava. A la fi he trobat una llibreria anomenada tweepy, que si funcionava.

Primer s'ha de registrar una nova aplicació al twitter http://twitter.com/oauth_clients  emplenar el formulari amb les dades pertinents. Un cop registrat s'han de copiar  aquestes claus al següent script per acabar el registre.


import tweepy
CONSUMER_KEY = 'Consumer Key del formulari web anterior'
CONSUMER_SECRET = 'Consumer Secret dle formulari web anterior'
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



Executam l'script i si tot va be tindrem una resposta com aquesta a la consola:


Please Authorize: URL
PIN:



Hem d'obrir la url al navegador, haurem d'autoritzar l'aplicació i ens retornará un PIN que hem de copiar i entrar a la consola on hem executat l'script. Un cop fet això l'script ens retornara un parell de claus que tindrem que guardar per fer-les servir al pròxim script.


import sys
import tweepy
import dbus
bus = dbus.SessionBus()
obj = bus.get_object('org.mpris.amarok', '/Player')
metadata = obj.get_dbus_method('GetMetadata', 'org.freedesktop.MediaPlayer')
info = metadata()
print 'Escoltant', info['title'], 'per', info['artist'], 'del album', info['album']
CONSUMER_KEY = 'Consumer key'
CONSUMER_SECRET = 'Consumer Secret'
ACCESS_KEY = 'Access Key retornada per l'script anterior'
ACCESS_SECRET = 'Access Secret retornada per l'script anterior'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
comentari = raw_input('Comentari: ')
comentari = comentari.decode('utf-8')
messg = 'Escoltant amb #amarok ' + info['title'] + ' per ' + info['artist'] + ' del album ' + info['album'] + ' : ' + comentari
print messg
api.update_status(messg)


Un cop editat i executat ens demana si volem entrar un comentari, acceptam prement intro i s'enviara l'informació de la pista que estiguem escoltant al Amarok.


Escoltant amb #amarok Nom de la peça musical per Cantant o interpret del album Nom del Album: comentari


Si tot va be en uns instants tindrem publicat al twitter. Tota l'informació l'he trobada a internet, la llibreria tweepy, els exemples de python OAuth també. Com que no som programador em podeu criticar sense pietat. La part de OAuth ha sigut dificil de solucionar fins que no he trobat la llibreria tweepy. La part de llegir els missatges de Amarok a dbus no m'he ha duit massa problemes. Tant la part de Amarok com la de Twitter poden tenir altres funcionalitats. Com el control de reproducció de Amarok o obtenir informació del nostre compte de twitter.

 Que quedi clar que no som programador, encara que si he fet coses senzilles  amb bash, python i altres llenguatges. Sou lliures de criticar-me, emprar o millorar els scripts. De moment a mi em va molt be per enviar les cançons al twitter. Si es pogués integrar i executar amb un botó des de Amarok ja seria fantàstic.