Demo tool get link nhạc mp3.zing.vn: Demo
Ý tưởng:
Trên trang zing, mỗi bài hát hoặc video, data đều được lưu vào file xml, nên ta sẽ đi tìm file xml đó để lấy thông tin bài hát. Chỉ như vậy thôi, thật đơn giản phải không nào. Nhưng sẽ có 1 số bài hát chúng ta không lấy được link mp3 hoặc video chúng ta không lấy được các link 720p, 1080p do bài hát đó bản quyền hoặc nó đòi hỏi tài khoản vip.
Cách thức thực hiện:
Bước đầu ta phân tích các kiểu url trên trang mp3 zing
Trên mp3 zing có 4 kiểu link nhạc:
Track đơn: http://mp3.zing.vn/bai-hat/*
Album: http://mp3.zing.vn/album/*
Playlist: http://mp3.zing.vn/playlist/*
Video: http://mp3.zing.vn/video-clip/*
Vì mỗi link khác nhau nên có kiểu lưu data xml khác nhau(album và playlist giống nhau).
Chúng ta có 3 dạng lưu file xml:
Track đơn: http://mp3.zing.vn/xml/song-xml/*
Album và playlist: http://mp3.zing.vn/xml/album-xml/*
Video: http://mp3.zing.vn/xml/video-xml/*
Ví dụ như bài hát: http://mp3.zing.vn/bai-hat/Vo-Nguoi-Ta-Phan-Manh-Quynh/ZW7WBZBI.html
Các bạn có thể view source link nó ra: view-source:http://mp3.zing.vn/bai-hat/Vo-Nguoi-Ta-Phan-Manh-Quynh/ZW7WBZBI.html
Sẽ có file xml tại đây: data-xml=”http://mp3.zing.vn/xml/song-xml/LGxHtZHNpAnhZbutkFcTvmkm”
Khi truy cập vào file xml đó ta sẽ thấy rõ các thông tin của bài hát này. Trong đó có <source></source> chính là link mp3 của bài hát đó. Tương tự như vậy các kiểu album và playlist cũng thế, còn video thì nó sẽ trả ra <f240>, <f360>, <f480>, <f720>, <f1080> tương ứng với độ phân giải của video.
Vậy các bước thực hiện sẽ là:
view source -> tìm file xml -> đọc file xml -> trả ra kết quả
Để thực hiện được việc này trước tiên chúng ta phải có function curl:
function curl($url)
{
$ch = @curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$head[] = "Connection: keep-alive";
$head[] = "Keep-Alive: 300";
$head[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$head[] = "Accept-Language: en-us,en;q=0.5";
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36');
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Expect:'
));
$page = curl_exec($ch);
curl_close($ch);
return $page;
}
Nếu các bạn theo dõi các bài viết get link của mình thì không lạ gì với function curl này rồi đúng không.
Các bước thực hiện:
View souce link ra, hay đọc nội dung link đó, chúng ta sử dụng function curl trên:
$data = curl($link);
Tìm file xml:
preg_match("/http:\/\/mp3.zing.vn\/xml\/song\-xml\/(.*?)\"/",$data,$arr_preg);
Đọc file xml, chúng ta sử dụng lại function curl:
$link_xml = str_replace('"','',$arr_preg[0]); // bỏ ký tự " trong chuỗi lấy được
$xml_data = curl($link_xml);
Trả ra kết quả, ở đây mình có 2 cách trả ra. Thứ 1 là dùng hàm preg_match để tách nội dung muốn lấy, thứ 2 là dùng simplexml_load_string chuyển nội dung file thành mảng.
– dùng preg_match get title và link mp3
preg_match("/<title><!\[CDATA\[(.*?)]]><\/title>/",$xml_data,$arrTitle);
$title = $arrTitle[1];
preg_match("/<source><!\[CDATA\[(.*?)]]><\/source>/",$xml_data,$arrLinkMp3);
$linkMp3 = $arrLinkMp3[1];
– dùng simplexml_load_string:
$xml_string = str_replace("<![CDATA[","",$xml_data); // xóa bỏ <![CDATA[ khỏi chuỗi
$xml_string = str_replace("]]>","",$xml_string); // xóa bỏ ]]> khỏi chuỗi
$xml = json_decode(json_encode((array) simplexml_load_string($xml_string)), 1); // chuyển đổi thành mảng
if($xml['item']){
$item = $xml['item'];
$linkMp3 = $item['source'];
$title = $item['title'];
}
Như vậy là chúng ta đã lấy được thông tin bài hát đó rồi function đầy đủ sẽ là:
function getMp3($link){
$link = trim($link);
$return = array();
if (preg_match("/http:\/\/mp3.zing.vn\/bai\-hat\/(.*?).html/",$link)){
$data = curl($link);
preg_match("/http:\/\/mp3.zing.vn\/xml\/song\-xml\/(.*?)\"/",$data,$arr_preg);
$link_xml = str_replace('"','',$arr_preg[0]);
$xml_data = curl($link_xml);
$xml_string = str_replace("<![CDATA[","",$xml_data);
$xml_string = str_replace("]]>","",$xml_string);
$xml = json_decode(json_encode((array) simplexml_load_string($xml_string)), 1);
if($xml['item']){
$item = $xml['item'];
$return['source'] = $item['source'];
$return['title'] = $item['title'];
$return['performer'] = $item['performer'];
$return['lyric'] = $item['lyric'];
$return['image'] = $item['backimage'];
$return['errormessage']= $item['errormessage'];
}
}
return $return;
}
Chỉ với 2 function curl và getMp3 chúng ta có thể get thông tin bài hát đó rồi, bạn chỉ cần điền link bài hát vào function getMp3, nó sẽ trả về cho bạn các thông tin cơ bản. Cách get album, playlist và video bạn có thể dựa vào các đoạn code trên để làm tương tự được rồi.
Nguồn:blogit.vn
0 nhận xét:
Đăng nhận xét