
Este script nació de la necesidad (ocio?) de actualizar mi estado en twitter con la canción que estaba escuchando en mi iPhone. El detalle esta en que solo actualizara mi perfil si la canción esta marcada como 'loved' en last.fm también detecta que día de la semana es y evalúa si es necesario agregar el hash tag #mm.
twitter_passwd="your_twitter_password_here"'
URL="http://twitter.com/statuses/update.xml"'
tags="#lastfm"'
lastfm_api="<your_api_from_lastfm_here>"'
lastfm_user="<your_lastfm_user_here>"'
bit_ly_user="<your_bit.ly_user_here>"'
bit_ly_apikey="<your_bit.ly_api_key_here>"'
'
fmtwitted=`cat /tmp/lastfm2twitter.tmp | \'
sed -e 's/status=Just played: //g' -e 's/#.*//g' | \'
grep '[a-z]'|sed -e 's/\ //g' -e 's/\-/./g'`'
'
fmcurrent=`curl -s "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&limit=1&user=$lastfm_user&api_key=$lastfm_api" | \'
grep -E '<name>|</name>|<artist\ |</artist>' |\'
head -n2| sed -e 's/<[^>]*>//g' | tr '\n' '.' |\'
sed -e 's/\ //g' -e 's/.$//g'`'
'
'
lastfm_song_url=`curl -s "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&limit=1&user=$lastfm_user&api_key=$lastfm_api" |\'
grep -E '<url>|</url>' | sed -e 's/<[^>]*>//g' |\'
head -n1| tr '\n' '.' | sed -e 's/\ //g' -e 's/.$//g'`'
bit_ly_url=`curl -s "http://api.bit.ly/shorten?version=2.0.1&longUrl=$lastfm_song_url&login=$bit_ly_user&apiKey=$bit_ly_apikey" | \'
grep shortUrl | sed -e 's/\"/\ /g' | awk '{print $3}'`'
'
today_mm=`date +%A`'
if [[ $today_mm == "Monday" ]] '
then tags="$tags #mm"'
fi'
'
'
if grep $fmcurrent /tmp/lastfm_loved.tmp > /dev/null'
then if [[ "$fmtwitted" == "$fmcurrent" ]]'
then exit 0'
else curl -s "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&limit=1&user=$lastfm_user&api_key=$lastfm_api" | \'
grep -E '<name>|</name>|<artist\ |</artist>' |\'
head -n2| sed -e 's/<[^>]*>//g' | tr '\n' '-' | \'
sed -e 's/^[ \t]*//' -e 's/-/\ -\ /g' -e 's/- $//g' -e 's/\ $//g' |\'
awk '{print "status=Just played: "$0}' > /tmp/lastfm2twitter.tmp'
lastfm2twitter=`cat /tmp/lastfm2twitter.tmp; '
echo $bit_ly_url '
echo $tags | tr '\n' ' '`'
echo $lastfm2twitter > /tmp/lastfm2twitter.tmp'
curl -s -u $twitter_user:$twitter_passwd -d @/tmp/lastfm2twitter.tmp $URL > /dev/null'
fi'
else exit 0'
fi'
Como se pueden dar cuenta estoy usando bit.ly para acortar las URLs de last.fm para lo cual tendrán que obtener una API Key. Aun tengo que optimizar el script guardando las peticiones de curl en un archivo y formar algo así como un cache o base de datos local de last.fm a bit.ly.
El script detecta si el mensaje sobrepasa el limite de 140 caracteres permitido por twitter y acorta el mensaje antes de enviarlo.