Twittear via Python
jueves, 13 de junio de 2013Ayer (por el 12/Junio) murió (fue muerta) el API 1.0 de Twitter así es que todas aquellas aplicaciones que no hubieran sido actualizadas a su versión 1.1 dejaron de funcionar. Ni que decir tiene que en mi caso dejaron de funcionar todas las aplicaciones.
Choqok (cliente de escritorio KDE4), Ttyter (cliente para terminal) y la aplicación Python basada en Tweepy que utilizo para generar avisos de actualizaciones del feed, publicaciones de fotografía/vídeo, eventos clima y cámaras, etc… todo muerto. Tuve que actualizar Ttyter a su última versión (Choqok tendrá que esperar ya que pide actualizar KDE4) y reconstruir el script python/Tweepy.
A modo telegrama os cuento como hice esta mini-cliente y como usarlo. Es bien sencillo.
Descarga librería Tweepy
Descarga, descomprime e instala
wget https://github.com/tweepy/tweepy/archive/master.zip -O tweepy.zip
unzip tweepy.zip
cd "~/carpeta de descargas/tweepy-master"
sudo python setup.py install
En mi caso además tuve que preinstalar las librerías setuptools que exigen esta nueva versión de Tweepy. Básicamente lo mismo de arriba:
wget "https://pypi.python.org/packages/source/s/setuptools/setuptools-0.7.2.tar.gz"
tar xvfz setuptools-0.7.2.tar.gz
cd setuptools-0.7.2
sudo python setup.py install
Crear tu aplicación en Twitter
Si no tienes todavía ninguna aplicación creada para publicar en Twitter dirigete a https://dev.twitter.com/apps/new y crea la tuya, no necesitas más de 1 minuto.
Necesitas obtener los cuatro campos facilitados por Twitter (Consumer key, Consumer secret, Access token, Access token secret) y asegurarte de tu aplicación tiene permisos (Access level) de Lectura/Escritura.
Script python
Crea un documento de texto con el siguiente contenido:#!/usr/bin/python
## -*- coding: UTF-8 -*-
import sys
import os
import re
import tweepy
consumer_key="xxx"
consumer_secret="yyy"
access_token="www"
access_token_secret="zzz"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
def tuitear(mensaje):
print "Twitteando: «"+str(mensaje)+"»"
api.update_status(mensaje)
def programar(hora, mensaje):
validaLongitud(mensaje)
mensaje=mensaje.replace("\"","\\\"" )
mensaje=mensaje.replace("#","\\#" )
ordenT= sys.argv[0]+" \\'"+mensaje+"\\' "
#print "Programar "+sys.argv[0]+" a las "+hora+" con \""+mensaje+"\""
os.system("echo "+ordenT+ " | at "+hora+"")
os.system('kdialog --passivepopup \''+mensaje+'\' 2 --name "twitter" --title "Twittear a las '+hora+'" --icon twitter')
def validaLongitud(mensaje):
if len(mensaje) > 140:
#print "Longitud excesiva "+str(len(mensaje))
return False
else:
#print "Longitud apropiada "+str(len(mensaje))
return True
def discriminar(mensajePartes):
if mensajePartes.group(1)==None:
#print "Envio inmediato"
tuitear(mensajePartes.group(2))
else:
#print "Envio programado"
programar(mensajePartes.group(1), mensajePartes.group(2))
def mostrardialogo(mensaje):
inputtext = os.popen( " kdialog --textinputbox 'Escribe tu tuit\n(para cancelar el envio deja la casilla en blanco)' '"+mensaje+"' --icon twitter --name Twittear --title Twittear | sed -r 's/\"/\\\"/gi' " )
mensaje = inputtext.readline()
return mensaje
def sanearMensaje(mensaje):
return mensaje[0:139]
def main(argumento):
if len(argumento) > 1:
mensaje=argumento[1]
#print "Con mensaje:"+str(mensaje)
else:
#print "Sin mensaje"
mensaje = mostrardialogo("")
#print "Con mensaje:"+str(mensaje)
#Si no hay indicacion horaria el objeto mensajePartes.group(1) es None
mensajePartes=re.match("(\d?\d:\d?\d)? ?(.*)", mensaje)
print mensajePartes.group(2)
while validaLongitud(mensajePartes.group(2))!=True:
mensaje=mostrardialogo(mensajePartes.group(1)+" "+sanearMensaje(mensajePartes.group(2)))
mensajePartes=re.match("(\d?\d:\d?\d)? ?(.*)", mensaje)
discriminar(mensajePartes)
if __name__ == '__main__':
try:
access_key
except NameError:
access_key = None
main(sys.argv)
Nota: Si quereis descargar este código con las tabulaciones de Python usad este TXT.
En el script anterior solo teneis que poner los valores (Consumer key, Consumer secret, Access token, Access token secret) dados para vuestra aplicación y está lista para funcionar. Guardadlo como (p.ejem: ~/bin/twittear.py ) y hacedlo ejecutable (chmod +x ~/bin/twittear.py)
Este script lo hice hace dos o tres años y aunque es muy mejorable funciona perfectamente desde escritorio, terminal ó enlazandolo con otros programas:
.~/twittear.py (abre un diálogo donde escribir el contenido del twit a enviar) (requiere KDIALOG de KDE4, cambiadlo si estais en otro escritorio)
.~/twittear.py «Mensaje breve a enviar» (envia el texto a twitter)
.~/twittear.py «Mensaje breve de más de 140 caracteres» (acorta el mensaje a 140 caracteres y lo devuelve dentro del diálogo anterior para que «lo arregles»)
.~/twittear.py «10:23 Mensaje breve» (programa la publicación del mensaje a la hora indicada en el inicio del mensaje) (requiere tener corriendo el servicio ATD)
De Spotify a Twitter
Una vez hecho y funcionando lo anterior podemos vincular otros aplicaciones para que «tuiteen» en nuestro nombre eventos ó recordatorios. Un ejemplo sería vincular un botón del teclado para enviar a Twitter lo que suena en Spotify de modo similar a como hicieramos con Amarok.
Si Spotify se está ejecutando podemos parsear a un array asociativo lo que está sonandodeclare -A spotifyString; while read linea; do eval $(echo "$linea" | sed -r 's/^([^:]*):([^:]*): (.*)$/spotifyString[\"\2\"]=\"\3\"/g'); done <<< "$(qdbus com.spotify.qt /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata)"
A continuación podríamos twittearlo contwittear.py "Está sonando ${spotifyString['title']} del álbum ${spotifyString['album']} de ${spotifyString['artist']}, escúchalo en ${spotifyString['url']}"
ActualizadoHe reescrito prácticamnete desde cero el código Python que puse inicialmente. Ahora es menos chapucero, fiable y menos farragoso. Si alguien copió el código anterior que lo actualice al nuevo código.
22 de December, 2024 @ 12:19