использовал денвер на windows, поэтому пришлось немного оптимизировать скрипты
Необходимо в php.ini увеличить время обработки скрипта
max_execution_time = 150
для упрощения задачи, пришлось изменить подключаемый файл (да простит меня автор)
<?php
/**
* A simple curl wrapper
*
* @package Curl
* @author Aleksandr Zelenin <aleksandr@zelenin.me>
* @link https://github.com/zelenin/Curl
* @license MIT
* @version 0.5.0
*/
//namespace Zelenin;
class mCurl
{
добавил проверку на спец.символы и существование скачанного файла:
<?php
const MP3_DIR = 'music/';
include("Curl.php");
$curl = new mCurl();
//$playlist_url = 'http://music.yandex.ru/#!/users/Muz-winamp/playlists/1047';
$playlist_url = 'http://music.yandex.ru/#!/users/muz-winamp/playlists/1046';
preg_match_all( '/users\/(.*)\/playlists\/(.*)/isu', $playlist_url, $matches );
$owner = $matches[1][0];
$playlist_id = $matches[2][0];
$response = $curl->get( 'http://music.yandex.ru/get/playlist2.xml?kinds=' . $playlist_id . '&owner=' . $owner );
$playlist = json_decode( $response['body'], true );
$playlist_title = $playlist['playlists'][0]['title'];
$playlist_title = str_replace("\'","_", $playlist_title);
$tracks = implode( ',', $playlist['playlists'][0]['tracks'] );
$response = $curl->get( 'http://music.yandex.ru/get/tracks.xml?tracks=' . urlencode( $tracks ) );
$tracks = json_decode( $response['body'], true );
$tracks = $tracks['tracks'];
$denied = array ('\\','/',':','?','*','<','>','|','"');
$playlist_title = str_ireplace($denied,"_", $playlist_title);
$playlist_dir = MP3_DIR . $playlist_title;
//iconv('utf-8','windows-1251', $playlist_dir);
echo $playlist_dir ."<br/>";
if ( !file_exists( $playlist_dir ) && !is_dir( $playlist_dir ) ) {
mkdir( $playlist_dir );
}
$index = 1;
echo "<table>";
foreach ( $tracks as $track ) {
$artist = $track['artist'];
$title = $track['title'];
$response = $curl->get( 'http://storage.music.yandex.ru/download-info/' . $track['storage_dir'] . '/2.mp3' );
$xml = new DOMDocument();
$xml->loadXML( $response['body'] );
$host = $xml->getElementsByTagName( 'host' )->item(0)->nodeValue;
$ts = $xml->getElementsByTagName( 'ts' )->item(0)->nodeValue;
$path = $xml->getElementsByTagName( 'path' )->item(0)->nodeValue;
$s = $xml->getElementsByTagName( 's' )->item(0)->nodeValue;
$n = md5( 'XGRlBW9FXlekgbPrRHuSiA' . substr( $path, 1 ) . $s );
$mp3_url = 'http://' . $host . '/get-mp3/' . $n . '/' . $ts . $path;
//echo $mp3_url . PHP_EOL;
$mp3_name = addslashes( $artist . ' - ' . $title . '.mp3' );
echo "<tr><td>".$index."</td><td>" . $mp3_name . PHP_EOL . "</td>";
//iconv('UTF-8','WINDOWS-1251', $playlist_title);
//iconv('UTF-8','WINDOWS-1251', $mp3_name);
$mp3_name = str_ireplace($denied,"_", $mp3_name);
echo "<td>".$mp3_name . PHP_EOL . "</td>";
if ( !file_exists( MP3_DIR . $playlist_title . '/' . $mp3_name )) {
$response = $curl->get( $mp3_url );
file_put_contents( MP3_DIR . $playlist_title . '/' . $mp3_name, $response['body'] );
echo "<td>downloaded</td></tr>";
} else {
echo "<td>exists</td><t/r>";
};
$index=$index+1;
};
echo "</table>";
с кодировкой было лень разбираться, потому что автомагнитола понимает только utf :)