rendered paste body#!/usr/bin/php5<?/**************************************************************** Cover Reciever 0.0.5 27.o8.2oo7 00:16 GMT+3 :) !! descr: Тащит из сети обложки к альбомам из сети. !! info: Заточил немножко под плеер Amarok (http://amarok.kde.org) !! running copy to ~/.kde/share/apps/amarok/scripts and restart amarok !! changes [*] small fixes [*] now it is an amarok script ))) lokee, http://lokee.rv.ua tnx 2 dicson ****************************************************************/$line = trim(fgets(STDIN));while (TRUE) { switch ($line) { case 'trackChange': getCover(); break; } $line = trim(fgets(STDIN));}/******* Main func*****/function getCover() { // getting info from amarok $song = array(); $keys = array( 'artist', 'title', 'coverImage', 'album', 'rating', 'path' ); for ($i=0; $i < count($keys); $i++) { $tmp = array(); exec ("dcop amarok player $keys[$i]", &$tmp); $song[$keys[$i]] = $tmp[0]; } $trimlist = " \t\n\r"; print_r($song); echo "\n\n"; if (strlen($song['album']) == 0 || strlen($song['artist']) == 0) { // no album outmsg("ERR: No Album or Artist in tags!\n", true); return; }/*elseif (strpos($song['coverImage'], 'nocover.png') == false) { // cover exist echo "ATT: Cover already exist!\n"; die();}*/ // sleep (убрать спячку если не нужна) sleep(3); $lastfmURL = 'http://ws.audioscrobbler.com/1.0/album/'.rawurlencode($song[artist]).'/'.rawurlencode($song[album]).'/info.xml'; outmsg("NFO: XML URL:\n".$lastfmURL."\n\n", false); // getting xml file from Last.FM // убрать если не нужны// $proxy = 'proxy.energi.net.ua:3128'; $useragent = 'FlashGet'; $socketTimeout = 20; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $lastfmURL); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $socketTimeout); if (isset($useragent)) { curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); outmsg("\tUser Agent: $useragent\n", false); } if (isset($proxy)) { curl_setopt ($ch, CURLOPT_PROXY, $proxy); outmsg("\tProxy: $proxy\n", false); } $albumXML = curl_exec($ch); curl_close($ch); if (strlen($albumXML) == 0) { // no data recieved or some error outmsg("ERR: No XML data recieved!\n", true); return; } elseif (strpos($albumXML, 'No such album') !== false || strpos($albumXML, 'not found')) { outmsg("ERR: Some Shit! :((\n\n\tRECV:\n\t$albumXML\n\n", true); return; } // all allright $album = array(); $xml = simplexml_load_string($albumXML); $song['release'] = trim((string) $xml->releasedate, $trimlist); $song['coverURL'] = (string) $xml->coverart->large; $dir = substr($song['path'], 0, strrpos($song['path'], '/')); $ext = substr(strrchr($song['coverURL'], '.'), 1); $cn = 'cover'; $fn = $dir.'/'.$cn.'.'.$ext; if (file_exists($dir.'/'.$cn.'.png')) { outmsg("NFO: Cover exists!\n", true); return; } outmsg("\nNFO: Album release date:\t$song[release]\n", false); outmsg("NFO: Cover (large size) URL:\n\t$song[coverURL]\n", false); outmsg("NFO: Path for saving:\n\t$fn\n", false); // download cover $socketTimeout = 45; outmsg("\nNFO: Recieving cover.. Timeout: $socketTimeout sec.\n". false); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $song['coverURL']); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $socketTimeout); if (isset($useragent)) { curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); outmsg("\tUser Agent: $useragent\n", false); } if (isset($proxy)) { curl_setopt ($ch, CURLOPT_PROXY, $proxy); outmsg("\tProxy: $proxy\n", false); } $cover = curl_exec($ch); curl_close($ch); if (strlen($cover) > 0) { // save pic if (!$fp = fopen($fn, 'wb')) { outmsg("ERR: Can't create file:\n$fn\n", true); return; } if (fwrite($fp, $cover) == false) { outmsg("ERR: Can't write to file:\n$fn\n", true); return; } fclose($fp); outmsg("NFO: Cover recieved and saved! Size: ".filesize($fn)."\n", false); if ($ext == 'jpg' || $ext == 'jpeg') { outmsg("NFO: Converting JPG -> PNG\n", false); exec ("convert \"$dir/$cn.$ext\" \"$dir/$cn.png\""); // remove jpeg file unlink($fn); outmsg("NFO: Deleting JPG cover\n", false); $ext = 'png'; } $dirfile = $dir.'/.directory'; if (!$fp = fopen($dirfile, 'wb')) { outmsg("ERR: Can't create $dirfile!\n", true); return; } if (fwrite($fp, "[Desktop Entry]\nIcon=./$cn.$ext\n") == false) { outmsg("ERR: Can't write to $dirfile!\n", true); return; } fclose($fp); outmsg("NFO: $dirfile successfully saved!\n", false); } // print popup exec ("kdialog --title \"Cover Reciever log\" --passivepopup \"Cover for $song[artist] - $song[album] recieved and saved!\" 3"); return;}/*****/* Outputs script message (ERR, NFO, ATT, etc)/****/function outmsg($message, $die = false) { fwrite (STDERR, $message); if ($die) { //return 3; } return;}?>