Flickr2Twitter script bash
jueves, 15 de julio de 2010El problema con los servicios para publicar en Twitter tu fotos de Flickr es que requieren intervención del usuario, es decir: despues de subir la foto te vas a XXX y le dás a enviar y la reenvias también a Twitter.
Pues menuda juerga, se trata de quitar trabajo no de generar más tareas.
Lo que yo quería es un servicio que de forma automática publique en mi perfil de Twitter un enlace a las fotos que publico en Flickr, y eso es lo que hace este script.
Funcionamiento
Se crea una tarea en cron que ejecute el script a intervalos. Como este ordenador está permanentemente encendido lo tengo puesto a cada hora, si el tuyo lo apagas puedes poner un intervalo menor de tal manera que pase menos tiempo entre que se suben las fotos a flickr y se anuncian en Twitter.
El script lee las fechas de tus ultimas publicaciones en Flickr consultando tu RSS de Flickr. Compara la fecha de publicación de la última foto con la fecha guardada de la anterior consulta y si ha cambiado procede a generar un mensaje que se envia a Twitter. El mensaje es diferente si se trata de una sola fotografía, de dos fotografías, de 20 fotografías o de entre 2 y 20 fotografías. Menos en el primer caso en el resto los mensajes son prácticamente iguales.
Si solo se ha publicado una nueva fotografía se obtiene una url abreviada a su página en Flickr y en incorporada junto con su título en el mensaje de Twitter.
Configuración
El script necesita modificar los datos de nuestra cuenta en Twitter (of course) e incorporar el ID de usuario en Flickr. Este ID (el mio es 70417829@N00 ) lo podeis obtener en vuestra «galeria de Flickr», en el RSS ubicado en la base de la página.
El resto del script no necesita ser alterado, aunque probablemente querais/deberiais modificar los mensajes, personalizarlo un poco y optimizarlo (ver dentro del script para más detalle)
El script es este, pero tambien lo podeis descargar de aqui: publicar/flickr2twitter.
Simplemente copiad esto en un archivo, guardadlo por ejemplo como flickr2twitter en una carpeta de ~/.flickr2twitter y cread en crontab una tarea periodica que lo ejecute.
#!/bin/bash
# Estos tres valores deberías personalizarlos
# Tu nombre de usuario en Twitter, tal y como aparece en tu propia página del servicio
nombreTwitter="tu_usuario_en_twitter"
# Contraseña de twitter
contrasenaTwitter="12345678"
# Nombre de tu usuario en Flickr
# Obten tu propio ID de Flickr consultando el RSS de tu galería en Flickr
idUsuarioFlickr="70417829@N00"
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Hasta aqui toda la información básica personalizable
# a partir de aqui cambia lo que quieras para personalizarlo a tu gusto
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# url de tu rss en flickr
urlRssFlickr="http://api.flickr.com/services/feeds/photos_public.gne?id=$idUsuarioFlickr&lang=es-us&format=xml"
#por defecto utilizamos la carpeta en la que se encuentra el script para guardar
carpetaTrabajo=`dirname $0`
fileAnteriorPublicacion="$carpetaTrabajo/anteriorPublicacion"
# Cogemos RSS
rssOrigen=`lynx --dump $urlRssFlickr`
# Nos quedamos con las horas de rssFechaPublicacionFoto
rssFechaPublicaciones=$(echo "$rssOrigen" | grep published | sed -e 's///g')
# Cogemos la última publicación
ultimaPublicacion=`echo "${rssFechaPublicaciones//[TZ]/ }" | line`
ultimaPublicacionUnix=`date +%s -d "$ultimaPublicacion"`
# Por defecto, la anteriorPublicacion es la última realizada
# excepto que un archivo indique lo contrario
if [ -f $fileAnteriorPublicacion ]; then
anteriorPublicacionUnix=`cat "$carpetaTrabajo/anteriorPublicacion"`
else
anteriorPublicacionUnix=$ultimaPublicacionUnix
echo "$ultimaPublicacionUnix" > "$carpetaTrabajo/anteriorPublicacion"
fi
if [ $ultimaPublicacionUnix -gt $anteriorPublicacionUnix ]; then
# La ultima publicación en el RSS es posterior a la rssFechaPublicacionFoto anteriorPublicacion
# Contamos el número de nuevas fotografías publicadas
contadorTemporal=0
for rssFechaPublicacionFoto in $rssFechaPublicaciones; do
temporalPublicacion=`echo ${rssFechaPublicacionFoto//[TZ]/ }`
temporalPublicacionUnix=`date +%s -d "$temporalPublicacion"`
if [ $temporalPublicacionUnix -gt $anteriorPublicacionUnix ]; then let contadorTemporal++; fi
done
IFS=$'\n'
rssTitulos=(`echo "$rssOrigen" | grep \<title | sed 's/ *//' | sed 's/\([^<].*\)/\1/'`)
rssUltimoTitulo=${rssTitulos[1]}
rssIds=(`echo "$rssOrigen" | grep \<id | sed 's/\([^<].*\)/\1/'`)
rssUltimoId=`echo ${rssIds[1]} | sed 's/.*photo\/\([0-9]*\).*/\1/'`
urlBase=(`echo "$rssOrigen" | grep "link rel=\"alternate\"" | sed 's//\1/' | tr -d " "`)
# "urlBase" es la url de tu página en flickr. La obtenemos consultando el RSS
# y a continuación obtenemos su url corta que llamamos "urlDefault" utilizando el servicio gratuito de http://2tu.us
# Como esta dirección no va a cambiar para acelerar este script y evitar consultas reiteradas y repetidas al servidor
# sería interesante que reemplazaras el valor de urlDefault por la url abreviada a tu galería en flickr.
# La siguiente linea deberia queda con algo como:
# urlDefault="http://utu.us/TU_URL"
urlDefault=`lynx --dump "http://2tu.us/?save=y&url=$urlBase" | grep "Your tight" | cut -d "]" -f2 | cut -d " " -f1`
case $contadorTemporal in
1)
urlLarga="$urlBase$rssUltimoId"
urlCorta=`lynx --dump "http://2tu.us/?save=y&url=$urlLarga" | grep "Your tight" | cut -d "]" -f2 | cut -d " " -f1`
fraseTwitter="Nueva fotografía \"$rssUltimoTitulo\" en mi cuenta de Flickr ( $urlCorta )."
;;
2)
fraseTwitter="Dos nuevas fotografías en mi cuenta de Flickr, \"$rssUltimoTitulo\" y otra ( $urlDefault )"
;;
20)
fraseTwitter="Más de 20 nuevas fotografias publicadas en mi cuenta de Flickr ( $urlDefault )." ;;
*)
fraseTwitter="Publicadas $contadorTemporal nuevas fotografias en mi cuenta de Flickr. \"$rssUltimoTitulo\" y otras. ( $urlDefault )"
;;
esac
# Enviamos a Twitter
curl --basic --user $nombreTwitter:$contrasenaTwitter --url http://twitter.com/statuses/update.xml --data source="curl" --data status="$fraseTwitter" &>/dev/null
# Registramos hora actual
echo $ultimaPublicacionUnix > $fileAnteriorPublicacion
else
# No hay publaciones nuevas
exit
fi
exit
18 de December, 2024 @ 20:40