'));
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;
}
?>