scrobbat je dávkový soubor pro odesílání informací o právě poslouchané hudbě na komunitní server Last.fm. Tato činnost se nazývá scrobbling a používá webovou službu definovanou zde.
Skript se může hodit, pokud používáte přehrávač, který není podporován oficiálním klientem Last.fm Scrobbler ani žádným z řady dalších scrobblerů.
Níže uvedený kód skriptu překopírujte do souboru scrobbat.php anebo si stáhněte a rozbalte
scrobbat.zip.
K jeho spuštění je potřeba mít na počítači instalováno PHP.
Kvůli fungování funkce curl je nutné v konfiguraci PHP.INI odkomentovat řádek
extension=php_curl.dll.
Dále je potřeba v instalaci PHP rozbalit knihovnu
ID3Tags library,
která je ke stažení zde.
Textovým editorem upravte ve skriptu scrobbat.php čtyři definice v jeho záhlaví.
Otisk MD5 hesla k vašemu účtu na last.fm můžete zjistit pomocí PHP takto:
Spusťte php-cli v konsole a pak napište
<?php echo md5('bar');?>, namísto bar
ovšem použijte vaše skutečné heslo. Pak ukončete zadávání z konsoly stiskem Ctrl-Z
a po dalším stisku Enter byste již měli vidět 32znakový MD5 hash vašeho hesla,
který zadejte do definice "MD5PWD".
Jméno právě vyposlechutého souboru MP3 se zadává jako parametr při spuštění skriptu. Musí mít vyplněny ID3 tagy Artist a Title. Příklad:
php-cli scrobbat.php "/Music/Grunge/Creed - Weathered/Weathered.mp3"
V případě úspěšného odeslání na last.fm skript vrací errorlevel 1. Pokud došlo k chybě, nastaví se errorlevel 0, což se dá využít v dávkovém souboru k opakovanému pokusu o nové odeslání.
<?php // Script scrobbat.php submits one mp3 file to last.fm
define ("LASTFMNAME","foo"); // Login name of your account on last.fm
define ("MD5PWD","37b51d194a7513e45b56f6524f2d51f2"); // MD5 hash of password
define ("CODEPAGE","CP1250"); // Code page used in ID3 tags of your music
define ("GETID3LIB","../getid3/getid3.php"); // Path to getid3.php file
$mp3file=@$_SERVER['argv'][1];
if (!$mp3file) die("No input file given\r\n");
include GETID3LIB;
$getID3 = new getID3;
$info=$getID3->analyze($mp3file);
$tagsv1=@$info['tags']['id3v1']; $tagsv2=@$info['tags']['id3v2'];
$artist=@$tagsv2['artist'][0]; if (!$artist) $artist=@$tagsv1['artist'][0];
if (!$artist) die("Id3tag 'Artist' not set\r\n");
$uart=urlencode(iconv(CODEPAGE,"UTF-8",trim($artist)));
$album=@$tagsv2['album'][0]; if (!$album) $album=@$tagsv1['album'][0];
$ualb=urlencode(iconv(CODEPAGE,"UTF-8",trim($album)));
$track=@$tagsv2['title'][0]; if (!$track) $track=@$tagsv1['title'][0];
if (!$track) die("Id3tag 'Title' not set\r\n");
$utit=urlencode(iconv(CODEPAGE,"UTF-8",trim($track)));
$trnr=@$tagsv2['track_number'][0]; if (!$trnr) $trnr=@$tagsv1['track_number'][0];
$utrnr=(integer)$trnr;
$secs=(integer)@$info['playtime_seconds'];
$time=time();
$token=md5(MD5PWD.$time);
$Url="http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=bat&v=1.0&u=".
LASTFMNAME."&t=$time&a=$token";
$CurlHandle=curl_init();
curl_setopt($CurlHandle, CURLOPT_URL, $Url);
curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($CurlHandle, CURLOPT_TIMEOUT, 15);
curl_setopt($CurlHandle, CURLOPT_RETURNTRANSFER, true);
$response=(curl_exec($CurlHandle));
if (curl_errno($CurlHandle)) die("CURL error: ".curl_error($CurlHandle)."\r\n");
$resparr=explode("\n",$response);
if ($resparr[0]!="OK") die($resparr[0]);
$sid=$resparr[1]; $SubUrl=$resparr[3];
$post="s=$sid&a[0]=$uart&t[0]=$utit&i[0]=$time&o[0]=P&r[0]=&l[0]=$secs&b[0]=$ualb&n[0]=$utrnr&m[0]=";
curl_setopt($CurlHandle, CURLOPT_URL, $SubUrl);
curl_setopt($CurlHandle, CURLOPT_POST, 1);
curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $post);
$response=(curl_exec($CurlHandle));
if (curl_errno($CurlHandle)) die("Curl error:".curl_error($CurlHandle)."\r\n");
curl_close($CurlHandle);
if (trim($response)!="OK") die ($response);
else echo "Submitted to last.fm\r\n"; exit(1);
?>