Ostatnio słuchana piosenka z Last.fm jako status w EKG

8 komentarzy

Zachciało mi się ostatnio słuchanej piosenki z serwisu Last.fm jako status opisowy w EKG.
Jako że nikt nie napisał takiego skryptu, musiałem spłodzić go sam. Na dodatek na koncie shell, gdzie stoi EKG, nie ma wbudowanej obsługi skryptów Pythona, dostępu do kompilatorów też nie.
Jednak wystarczyło trochę pokombinować - wyszło nawet całkiem ładnie. No, ale żeby dalej nie zanudzać napiszę Wam, jak stworzyć takie cudo.

Po pierwsze potrzebujemy jakiegoś hostingu. Gdy takowy znajdziemy, w zależności od posiadanej wersji PHP, tworzymy skrypt:

Wersja dla PHP4: (bez wbudowanej obsługi plików XML)

Tutaj będzie potrzebny nam skrypt LastRSS, który możemy pobrać z tej strony. Skrypt prezentuje się następująco:

<?php
include "lastrss.php";
$nick = "kubz"; # <- NASZ NICK NA LAST.FM
$rss = new lastRSS;
$rss->cache_time = 0;
$rss->cp = "UTF-8";
$rss->date_format = "l";
$rssurl = "http://ws.audioscrobbler.com/2.0/user/".$nick.
"/recenttracks.rss";
if ($rs = $rss->get($rssurl)) {
$f = $rs[items][0][title];
$f = str_replace(chr(128), "-", $f); # zamiana dziwnych 
#znaczków na myślnik, wersja dla domyślnego kodowania: ISO-8859-2
$f = str_replace(chr(226), "", $f); # j.w.
$f = str_replace(chr(147), "", $f); # j.w.
echo "Last.fm: ".$f;
}
else {
echo 'Error';
}
?>


Wersja dla PHP5:

Natomiast dla PHP5 sprawa ma się nieco prościej, a mianowicie wymaga tylko MagpieRSS
<?php
$nick = "kubz"; # NASZ NICK NA LAST.FM
$url = "http://ws.audioscrobbler.com/2.0/user/".$nick."/recent".
"tracks.rss";
require('rss_fetch.inc.php');
$rss = fetch_rss($url);
$f = $rss->items[0]['title'];
$f = str_replace("?", "-", $f); # zamiana długiego myślnika na 
#krótszy, przecież EKG i GG nie obsługuje UTF-8...
echo "Last.fm: ".$f;
?>

A tutaj jest lepszy kod, napisany przez Marinesa:
<?php
function getLastTrack($username, $line = 14) {
	$file = file('http://ws.audioscrobbler.com/2.0/user/'.$username.'/recenttracks.rss');
	echo str_replace('?','-',mb_convert_encoding(trim(preg_replace("/(<title>|<\/title>)/i","",$file[$line-1])),'ISO-8859-2','UTF-8'));
}
getLastTrack('marines');
?>

Gdy już uporamy się ze skryptem, jest już z górki. Na koncie shell tworzymy w katalogu domowym plik lastfm, a w nim:
#!/bin/sh
ADRES="http://..." # adres do naszego skryptu
wget -q $ADRES -O /tmp/lastfm
LAST=`cat /tmp/lastfm`
echo "/away "$LAST > ~/.gg/ekg-pipe
rm /tmp/lastfm

Oczywiście trzeba nadać odpowiednie prawa temu skryptowi, przez
chmod +x lastfm

Teraz należy odpalić EKG, ale z opcją "-c", wygląda to następująco:
screen ekg -c ~/.gg/ekg-pipe

Gdy EKG się odpali, włączamy w nim timer. Aby to zrobić, trzeba wpisać:
timer -a last */60 exec ./lastfm


I to by było na tyle :)
Efekt tego skryptu możecie zobaczyć pod moim numerem GG (2287960)