')); preg_match_all('~(.*?)~ims',$rec_xml,$artists,PREG_SET_ORDER); // Так как рекомендации обновляются раз в неделю, растянем удовольствие // Максимальное количество новых исполнителей которые будут скачены $newArtist = MAX_ARTIST; $artistCounter=0; $artistTotal = count($artists); while($artistCounter<$artistTotal && $newArtist >0){ // Убедимся, что такого исполнителя ещё не слушали if(strlen($artists[$artistCounter][1])>0 && !in_array($artists[$artistCounter][1],$know)){ $newArtist--; $artist = &$artists[$artistCounter][1]; // Добавим исполнителя в список известных $know[]=$artist; $f=fopen(SAVE_TO_DIR.'know.txt','a'); fwrite($f,$artist."\n"); fclose($f); // Вытащим топ артиста $top_xml = disguise_curl('ws.audioscrobbler.com','/1.0/artist/'.urlencode($artist).'/toptracks.xml'); preg_match_all('~(.*?)~ims',$top_xml,$titles,PREG_SET_ORDER); $newTrack = MAX_TRACK; $trackCounter = 0; $trackTotal = count($titles); while($trackCounter<$trackTotal && $newTrack >0){ // Найдем и скачаем трек if( !file_exists(SAVE_TO_DIR.date('Y.m.d').'/'.$artist.' - '.$titles[$trackCounter][1].'.mp3') && download_track($artist,$titles[$trackCounter][1]) ){ $newTrack--; } $trackCounter++; } } $artistCounter++; } /** * Поиск и скачивание трека * @param string artist исполнитель * @param string track название трека */ function download_track($artist,$track) { // Поищим ссылки на mp3 в skreemr.com $result_page = disguise_curl('skreemr.com','/results.jsp?q='.urlencode($artist.' '.$track)); $result_page = substr($result_page,strpos($result_page,'')); preg_match_all('~\~ims',$result_page,$results,PREG_SET_ORDER); //Проанализируем, есть ли то что нужно if(count($results)>0){ for($i=0,$imax=count($results);$i<$imax;$i++){ if(strpos($results[$i][1],$artist) || strpos($results[$i][1],$track)){ // Качаем if(preg_match('~href="(ftp|http)://([^/]+\.[^/]{2,})(.*?)"\s~',$results[$i][1],$match)){ if(!is_dir(SAVE_TO_DIR.date('Y.m.d'))){ mkdir(SAVE_TO_DIR.date('Y.m.d')); chmod(SAVE_TO_DIR.date('Y.m.d'),0777); } disguise_curl($match[2],$match[3],SAVE_TO_DIR.date('Y.m.d').'/'.$artist.' - '.$track.'.mp3',($match[1]=='ftp'?true:false)); return true; } } } } return false; // Вообще, если файл не нашелся в skreemr.com, то его можно поискать на самом last.fm среди бесплатных треков, и в гугле $other_link = 'http://www.google.com/search?hl=en&q=-inurl:(htm|html|php|shtml|asp|jsp|pls|txt|aspx|jspx)%20intitle:index.of%20+%20%22last%20modified%22%20+%20description%20+%20size%20+(wma|mp3|wav|ogg|avi|divx|mpeg)%20%22'.urlencode($artist.' - '.$track).'22&btng=google+search'; } /** * Скачиваем ссылку * @param string host имя хоста * @param string url путь * @param string filename имя файла в который сохранить содержимое ссылки * @param boolean ftp */ function disguise_curl($host, $url,$filename = false,$ftp = false) { $curl = curl_init(); $header = array(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= 'text/html;q=0.9,text/plain;q=0.8,image/png,*'.'/'.'*;q=0.5'; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_URL, ($ftp===true?'ftp://':'http://').$host.$url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11; .NET CLR 2.0.50727) Gecko/20071127 Firefox/2.0.0.11'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_AUTOREFERER, true); if($filename!==false && strlen($filename)>0){ $f = fopen($filename,'w'); curl_setopt($curl, CURLOPT_FILE, $f); curl_exec($curl); curl_close($curl); return; } curl_setopt($curl, CURLOPT_TIMEOUT, 15); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $html = curl_exec($curl); curl_close($curl); return $html; } ?>