vit$oft freeware home page

scrobbat - dokumentace

English version

Účel programu

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ů.

Instalace

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 pět parametrů v jeho záhlaví.

Používání skriptu scrobbat

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í.

Obsah skriptu scrobbat.php

<?php // Script scrobbat.php submits one mp3 file to last.fm $username="foo"; // Your username on last.fm $password="bar"; // Password to your account on last.fm $getid3lib="../getid3/getid3.php"; // Path to getid3.php file $sessionFile="C:\\Documents and Settings\\foo\\AppData\\lastfm.sid"; // Filename where session key will be kept $CP="CP1250"; // Code page used in ID3 tags of your music. $api_key="5cc2552420a26f71f9343e34f0783d54"; // scrobbat API key. Do not change. $secret="b286614cea2d1621ea96fb8021f6ae7b"; // scrobbat autentization string $mp3file=@$_REQUEST['file']; if (!$mp3file) $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"); $art=iconv($CP,"UTF-8",trim($artist)); $album=@$tagsv2['album'][0]; if (!$album) $album=@$tagsv1['album'][0]; $alb=iconv($CP,"UTF-8",trim($album)); $track=@$tagsv2['title'][0]; if (!$track) $track=@$tagsv1['title'][0]; if (!$track) die("Id3tag 'Title' not set\r\n"); $tit=iconv($CP,"UTF-8",trim($track)); $trnr=@$tagsv2['track_number'][0]; if (!$trnr) $trnr=@$tagsv1['track_number'][0]; $trnr=(integer)$trnr; $secs=(integer)@$info['playtime_seconds']; $CurlHandle=curl_init(); curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($CurlHandle, CURLOPT_TIMEOUT, 15); curl_setopt($CurlHandle, CURLOPT_RETURNTRANSFER, true); if (file_exists($sessionFile)) $sessionkey=file_get_contents($sessionFile); else {$api_sig=md5("api_key".$api_key."methodauth.getMobileSessionpassword".$password."username".$username.$secret); $post="username=".urlencode($username)."&password=".urlencode($password)."&api_key=$api_key&api_sig=$api_sig"; curl_setopt($CurlHandle, CURLOPT_URL, "https://ws.audioscrobbler.com/2.0/?method=auth.getMobileSession"); curl_setopt($CurlHandle, CURLOPT_POST, 1); curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $post); $response=curl_exec($CurlHandle); $MobileSession=simplexml_load_string($response); $status=@$MobileSession['status']; $error=@$MobileSession['error']; if ($status=="ok"){$sessionkey=$MobileSession->session->key; file_put_contents($sessionFile,$sessionkey); } else die("Session failed: $error"); } curl_setopt($CurlHandle, CURLOPT_URL, "https://ws.audioscrobbler.com/2.0/?method=track.scrobble"); date_default_timezone_set("UTC"); $timestamp=time(); $api_sig=md5("album".$alb."api_key".$api_key."artist".$art."duration".$secs."methodtrack.scrobblesk".$sessionkey. "timestamp".$timestamp."track".$tit."trackNumber".$trnr.$secret); $post="album=".urlencode($alb)."&api_key=$api_key&api_sig=$api_sig&artist=".urlencode($art). "&duration=$secs&sk=$sessionkey&timestamp=$timestamp&track=".urlencode($tit)."&trackNumber=$trnr"; curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $post); $response=(curl_exec($CurlHandle)); curl_close($CurlHandle); $scrobbles=simplexml_load_string($response); $status=@$scrobbles['status']; $error =@$scrobbles->error; if ($status!="ok") die("Scrobble failed: $error"); else echo "Submitted to last.fm\r\n"; exit(1); ?>