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

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)


Komentarze do notki “Ostatnio słuchana piosenka z Last.fm jako status w EKG”

  1. Marines Blog 

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

    Po uwadze dotyczącej "dziwacznego kodu" w poście bunia zostałem zmuszony do wymyślenia czegoś lepszego i kompatybilnego z PHP4 i PHP5 zarazem. Mało tego! Nie będziemy musieli mieć w systemie obecnego wgeta (ale czy jest taki ktoś?).

  2. Walker 

    Hm.. ale dlaczego napisałeś, że jeden jest dla PHP 4, a drugi dla 5, kiedy to żaden nie jest napisany w 5, a oba zostaną obsłużone i w 4 i w 5?

  3. kubz 

    Napisałem tak, gdyż pod PHP4, które dysponuje nie ma obsługi XMLów i trzeba kombinować, ale dobra, poprawię toto.

  4. Walker 

    Oczywiście, że jest obsługa XML w PHP 4. :)

  5. kubz 

    To że jest to wiem, ale ja na tym serwerze mam jakąś radziecką wersję PHP4 bez obsługi XMLów

  6. marines 

    IMHO dziwaczny trochę ten kod, ale przyda się :)

  7. Walker 

    Kod okropny, fakt. :)

  8. kubz 

    No cóż, programista PHP ze mnie marny, ważne że ten kod działa ^^”

Zostaw odpowiedź