また、主要な役割の1つにmoskva.fmがありました。moskva.fmは、多数のラジオ局とチャートのリストを1か所で注意深く収集しました。 すべてが非常に簡単ですが、初心者プログラマーの多くが興味を持っていると思います。
何が起こったかの画面:
ロゴをクリックすると、このステーションのtop100の新しいzipアーカイブがダウンロードされ、mp3形式のファイルが含まれます。
それでは、小さい方から大きい方へ行ってみましょう。
error_reporting(E_ALL); // simplehtmldom include_once('simplydom.php'); //100 50 = 5000 // - 9000 set_time_limit(9000);
Simpl e HTMLDOMプロジェクトは、SimplyXMLやその他のHTML / DOMライブラリの気取らない類似物です。 特徴的な機能:中国人は名前で見えるものを書き、マークアップのエラーを絶対に吐き出し、ファイルを解析しようとしました。 数回使用するとセグメンテーション違反になります。 激しく記憶を食べる 同じオブジェクトに親と子を保存する各ノードについて、print_rを介してオブジェクトを表示することで内部を明確に見ることができます。また、小さな、すぐに見えないが非常にクールなものもあります。たとえば、負のインデックスで検索できます。 ページの最後から3番目のdivを取得する必要がある場合、これは問題になりません。
さらに進んでください-名前で曲を受け取り、定義した場所に保存する関数を作成します。
/* * $title * $path, * "$number $title.mp3" */ function getSongByTitle($title,$path,$number) { // UserAgent $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13)'; $cookie = ''; // $login = '*******@gmail.com'; $password = '********'; // cURL $ch = curl_init(); // POST curl_setopt($ch, CURLOPT_POST, true); // UserAgent curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); // // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Location: ... curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login'); // POST- $post = array( 'act' => 'login', 'q' => '', 'al_frame' => '1', 'expire' => '', 'captcha_sid' => '', 'captcha_key' => '', 'from_host' => 'vkontakte.ru', 'email' => $login, 'pass' => $password ); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); // $answer = curl_exec($ch); // - $sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60); $cookie = 'remixsid=' . $sid; // GET curl_setopt($ch, CURLOPT_POST, false); // cookie curl_setopt($ch, CURLOPT_COOKIE, $cookie); // URL curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/al_search.php?al=1&c[q]='.urlencode($title).'&c[section]=audio'); // $answer = curl_exec($ch); curl_close($ch); // json html // $answer = substr($answer,strpos($answer,'{"section":"audio"')); $answer = substr($answer,strpos($answer,'<!> ')+4); $answer = trim($answer); // , if (!file_exists($path . $number . ' ' . $title . '.mp3')) { if (strpos($answer,' ')==false) { // simplydom, $html = str_get_html($answer); // input, 99% // $filelink = $html->find('input',0)->attr['value']; // http://....mp3,bitrate // - - bitrate $filelink = explode(",",$filelink); $filelink = $filelink[0]; echo " $filelink \n"; $ch = curl_init(); // ( , ) $fp = fopen($path . $number . ' ' . $title . '.mp3', 'w'); // cURL curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_URL, $filelink); curl_setopt($ch, CURLOPT_COOKIE, $cookie); $answer = curl_exec($ch); fclose($fp); echo " $filelink \n"; // , PHP seg.fault $html->clear(); unset($html); } else { echo " \n"; } } } /* * zip-, */ function create_zip($files = array(),$destination = '') { if(file_exists($destination)) { return false; } $valid_files = array(); if(is_array($files)) { foreach($files as $file) { if(file_exists($file)) { $valid_files[] = $file; } } } if(count($valid_files)) { $zip = new ZipArchive(); if($zip->open($destination,ZIPARCHIVE::CREATE) !== true) { return false; } foreach($valid_files as $file) { $zip->addFile($file,$file); } $zip->close(); return file_exists($destination); } else { return false; } } $filename = array(); $filename[] = array('href'=>'http://www.moskva.fm/stations/FM_90.8/top100','fm'=>'90_8'); // , // $filename[] = array('href'=>'http://www.moskva.fm/stations/FM_101.2/top100','fm'=>'101_2'); foreach ($filename as $item) { // - $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203'; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_URL, $item['href']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $answer = curl_exec($ch); $answer = trim($answer); curl_close($ch); echo ' ' . $item['href'] . ' '; $html = str_get_html($answer); // $filesarray $filesarray = array(); for ($i = 0; $i < 100; $i++) { echo '----' . $i . '-------- '; $song = $html->find('td[class=name] pa[class=song]', $i)->innertext; $artist = $html->find('td[class=name] pa[class=artist]', $i)->innertext; $fullsongname = $artist . ' - ' . $song; echo ' ' . $i . ' ' . $fullsongname . "\n"; if (!is_dir($_SERVER['DOCUMENT_ROOT'].'/mp3/'.$item['fm'])) { mkdir($_SERVER['DOCUMENT_ROOT'].'/mp3/'.$item['fm'],0755); } // , // if ($i+1<10) { $number = '0'.$i+1; } else { $number = $i+1; } // getSongByTitle($fullsongname,$_SERVER['DOCUMENT_ROOT'].'/mp3/'.$item['fm'].'/',$number); // $filesarray[] = $_SERVER['DOCUMENT_ROOT'].'/mp3/'.$item['fm'].'/' . $number . ' ' . $fullsongname . '.mp3'; echo " \n"; } if (!is_dir($_SERVER['DOCUMENT_ROOT'].'/zip')) { mkdir($_SERVER['DOCUMENT_ROOT'].'/zip',0755); } // create_zip($filesarray,$_SERVER['DOCUMENT_ROOT'].'/mp3/zip/'.$item['fm'].'.zip'); // , PHP seg.fault $html->clear(); unset($html); }
モスクワ駅の周波数+美しいpngを示すロゴの選択