[Web] Lấy link nhạc trực tiếp từ MP3 Zing

Cập nhật (05/09/2015): Tôi vừa cập nhật lại bài viết này để tạo một trang web mà người dùng có thể tải về các bài hát, album, video trực tiếp trên MP3 Zing mà không cần dùng đến công cụ nào nữa. Xem thêm tại bài [Web] Tải nhạc, album, video trực tiếp từ MP3 Zing với PHP và jQuery

——————————————————————————————

Các cư dân mạng chắc hẳn không xa lạ gì với trang mp3.zing.vn, một trang web nghe nhạc trực tuyến hàng đầu Việt Nam. Đã có rất nhiều bài viết giới thiệu về trang web này rồi, tôi không nói thêm làm gì nữa. Trong bài viết này, tôi sẽ giới thiệu đến các bạn cách lấy link nhạc trực tiếp của 1 bài hát bất kì trên MP3 Zing. Nếu bạn sở hữu 1 trang web nhạc hoặc đơn giản là muốn phát danh sách các bài hát yêu thích trên trang web cá nhân thì bài viết này sẽ giúp ích cho các bạn trong việc tiết kiệm băng thông (bandwidth) và dung lượng tài nguyên (upload các bài hát lên server).

Sau đây tôi sẽ sử dụng trang MP3 Zing để tìm kiếm 1 bài hát nào đó và sẽ lấy toàn bộ thông tin cũng như link nhạc trực tiếp của bài hát đó.

1, Cấu trúc

Tôi nhận thấy trang MP3 Zing sử dụng phương thức GET để tìm kiếm các bài hát theo cấu trúc “http://mp3.zing.vn/tim-kiem/bai-hat.html?q=” + “tên+bài+hát“. Kết quả trả về sẽ như thế này:

Lấy link nhạc trực tiếp từ MP3 Zing

Từ kết quả nhận được tôi có đường dẫn của bài hát là http://mp3.zing.vn/bai-hat/Con-Mua-Ngang-Qua-M-TP/ZWZCF80A.html . Tiếp theo tôi sẽ đọc nội dung trang web trả về để tìm lấy ID thật sự của bài hát này là ZnJHyLmNduJLdvFyLvcTFmLH để lấy toàn bộ thông tin của bài hát này dưới dạng XML tại địa chỉ http://mp3.zing.vn/xml/song-xml/ZnJHyLmNduJLdvFyLvcTFmLH. Và đây là thông tin bài hát

Xem thông tin bài hát từ MP3 Zing

2, Phân tích

Cách mà tôi dùng để lấy thông tin bài hát là đọc nội dung trang web, sau đó tách các thẻ để lấy ID thật sự của bài hát. Kết quả đầu tiên mà Mp3 Zing trả về thường là chính xác nhất hoặc gần đúng nhất. Do đó, tôi sẽ bắt đầu lọc từ phần này.

Lấy link nhạc trực tiếp từ MP3 Zing

Tôi đã thử nghiệm với nhiều từ khóa khác nhau thì thấy đôi khi MP3 Zing vẫn trả về kết quả nhưng khi click vào thì nhận được thông báo lỗi là “Bài hát này không tồn tại trên hệ thống nữa.” Đến lúc này thì tôi lại tiếp tục phân tích những bài hát tiếp theo ở dưới như hình sau

Lấy link nhạc trực tiếp từ MP3 Zing

3, Lấy thông tin bài hát

Sau khi đã trình bày sơ lược về cấu trúc và cách mà tôi sẽ lấy thông tin bài hát thì đây là đoạn code mà tôi muốn giới thiệu đến các bạn

<?php
set_time_limit(0);
ini_set('max_execution_time', 30000);
//Prepare data to search
$title = trim(strtolower("con mua ngang qua"));
$url = "http://mp3.zing.vn/tim-kiem/bai-hat.html?q=" . urlencode($title);
//Request to mp3.zing.vn to get data
$data = file_get_contents($url);
//Fetching data
/*=== LUU Ý: Đôi khi sẽ có kết quả đầu tiên hiển thị ở gần Header
nhưng khi click vào thì sẽ nhận được thông báo là file nhạc đó không tồn tại nữa (bị xoá).
Do đó cần kết hợp thêm trường hợp là lấy những bài hát trong danh sách những bài hát ở dưới.
===*/
$mp3_zing_song_id_tmp = "";
$mp3_zing_song_id = "";
$link_mp3_tmp = "";
$music = "";
$link_to_view_song_infor = "";
/*=== Find first song result (near by header) ===*/
if(!empty($data)) {
$songs = explode('class="first-search-song"', $data);
if(!empty($songs[1])) {
$link = explode('href="', strip_tags($songs[1], '<a>'));
if(!empty($link[1])) {
$link_result = explode("\">", $link[1]);
if(!empty($link_result[0])) {
$mp3_zing_song_id_tmp = split_string($link_result[0]);
$music = "http://mp3.zing.vn" . $link_result[0];
//Request song page to get infor detail (contain real ID song)
if(!empty($music)) {
$source = file_get_contents($music);
if(!empty($source)) {
$xml = explode('flashvars="songid=0&amp;autostart=true&amp;xmlURL=', $source);
if(!empty($xml[1])) {
$xml = explode('&amp;',$xml[1]);
if(!empty($xml[0])) {
$link_to_view_song_infor = $xml[0];
$mp3_zing_song_id = trim(str_replace("http://mp3.zing.vn/xml/song-xml/", "", $link_to_view_song_infor));
//Get link music to play (remember that is temporary link)
$sourceXML = file_get_contents($link_to_view_song_infor);
if(!empty($sourceXML)) {
$download = explode('<source><![CDATA[', $sourceXML);
if(!empty($download[1])) {
$download_tmp = explode(']]></source>', $download[1]);
if($download_tmp[0]) {
$link_mp3_tmp = $download_tmp[0];
}
}
}
}
}
else {
/*=== Find first song into list below ===*/
$sub_songs = explode('class="content-item ie-fix"', $data);
if(!empty($sub_songs[1])) {
$sub_link = explode('href="', strip_tags($sub_songs[1], '<a>'));
if(!empty($sub_link[1])) {
$sub_link_result = explode("\">", $sub_link[1]);
if(!empty($sub_link_result[0])) {
$mp3_zing_song_id_tmp = split_string($sub_link_result[0]);
$music = "http://mp3.zing.vn" . $sub_link_result[0];
//Request song page to get infor detail (contain real ID song)
if(!empty($music)) {
$sub_source = file_get_contents($music);
if(!empty($sub_source)) {
$sub_xml = explode('flashvars="songid=0&amp;autostart=true&amp;xmlURL=', $sub_source);
if(!empty($sub_xml[1])) {
$sub_xml = explode('&amp;',$sub_xml[1]);
if(!empty($sub_xml[0])) {
$link_to_view_song_infor = $sub_xml[0];
$mp3_zing_song_id = trim(str_replace("http://mp3.zing.vn/xml/song-xml/", "", $link_to_view_song_infor));
//Get link music to play (remember that is temporary link)
$sub_sourceXML = file_get_contents($link_to_view_song_infor);
if(!empty($sub_sourceXML)) {
$sub_download = explode('<source><![CDATA[', $sub_sourceXML);
if(!empty($sub_download[1])) {
$sub_download_tmp = explode(']]></source>', $sub_download[1]);
if($sub_download_tmp[0]) {
$link_mp3_tmp = $sub_download_tmp[0];
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else {
echo "Không tìm thấy bài hát phù hợp!";
}
}
if(!empty($music) && !empty($mp3_zing_song_id_tmp) && !empty($mp3_zing_song_id) && !empty($link_to_view_song_infor) && !empty($link_mp3_tmp)) {
echo 'Link bài hát: <a href="'. $music .'">'. $music .'</a>';
echo '<br />ID bài hát (tạm thời): <strong>'. $mp3_zing_song_id_tmp .'</strong>';
echo '<br />ID bài hát (thật sự): <strong>'. $mp3_zing_song_id .'</strong>';
echo '<br />Đường dẫn chứa thông tin bài hát: <a href="'. $link_to_view_song_infor .'">'. $link_to_view_song_infor .'</a>';
echo '<br />Linh MP3 của bài hát (tạm thời): <a href="'. $link_mp3_tmp .'">'. $link_mp3_tmp .'</a>';
}
//header('location: ' . $link_mp3_tmp);
/*=== HELPER ===*/
function split_string($str) {
$split = explode('/', $str);
$result = trim(str_replace(".html", "", $split[3]));
return $result;
}
?>

Và kết quả nhận được

Lấy link nhạc trực tiếp từ MP3 Zing

4, Download bài hát

Nếu các bạn muốn tải bài hát này về thì chỉ cần dùng lệnh header như dòng code dưới đây

<?php
header('location: ' . $link_mp3_tmp);
?>

Các bạn lưu ý là link nhạc trực tiếp của bài hát không phải là link cố định mà thay đổi theo timestamp nhưng các bạn yên tâm, link nhạc đó các bạn vẫn sử dụng được.

[both_download_live_demo_tag]http://demo.tanvietblog.com/get_link_from_mp3_zing/ | http://www.mediafire.com/download/jo20ljlwl6xfx1w/Lay_link_nhac_truc_tiep_tu_MP3_Zing_-_tanvietblog.com.rar[/both_download_live_demo_tag]

Hi vọng bài viết này giúp ích cho các bạn. Thân ái!

 

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like…

8 Responses

  1. zizu says:

    demo trên localhost lại k dc vậy bạn ơi

    • Tấn Việt says:

      Bạn thử trên trang demo của mình, thấy có bị lỗi gì không ? Chứ mình test kĩ trên localhost rồi mới upload lên trang demo. Bạn có thể nối rõ hơn về lỗi bạn gặp được không?

  2. zizu says:

    demo của bạn, mình test thì OK roài.
    Lỗi là.Viết tên bài hát, nhưng k tìm dc bài hát đó.trên demo của bạn thì tim dc

  3. Kiến Hâu says:

    Cái này mình từng làm đồ án nhúng vô C# rồi. Mình nghĩ bạn nên để người dùng nhập link nhạc rồi mình getlink file cho người dùng thì hay hơn là điền tên — rồi tim kiếm — rồi lấy link từ kế quả. Họ không quan tâm mấy cái đó đâu! ý kiến riêng thôi. cảm ơn bạn đã share. Trang của bạn rất đẹp!

  4. an tuan says:

    phương thức bạn xác dịnh ID chính như thế nào bạn
    mình làm trên C#,winform. bạn có thẻ chỉ mình cách láy mã ID không
    bạn có yahoo hay mail, để liên lac không

  5. Hoàng Văn Nam says:

    đây là của năm 2015, hiện tại 2017, có bạn nào rõ cái này chỉ mình với.

  6. Cường says:

    Không có API để lấy link hả bạn?