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

Trước đó, tôi cũng đã chia sẻ cách lấy đường link nhạc trực tiếp trên trang MP3 Zing thì trong bài viết hôm nay tôi tiếp tục 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 nào đó trên trang web nghe nhạc trực tuyến thuộc vào loại tầm cỡ lớn của Việt Nam — trang Nhaccuatui.

Thực ra thì bạn hoàn toàn có thể download một bài hát nào đó trên 2 trang Mp3 ZingNhaccuatui chỉ với addon của phần mềm IDM (Internet Download Manager). Nhưng nếu bạn là một lập trình viên thì đôi lúc bạn cần nhiều hơn thế, có thể bạn sẽ viết một đoạn code nào đó mà tự động lấy link nhạc về mà không cần sử dụng tool nào hết.

1, Phân tích

Cũng giống như ví dụ mà tôi đã đề cập trong bài viết trước, lần này tối cũng sẽ cho phép người dùng nhập một từ khóa nào đó vào ô tìm kiếm và kết quả trả về sẽ là thông tin + link download trực tiếp bài hát tìm được.

Đối với trang Nhaccuatui thì tôi sẽ thử nghiệm trên trang Mobile của trang web này tại địa chỉ http://m.nhaccuatui.com. Sở dĩ tôi chọn trang Mobile vì nó có cấu trúc khá đơn giản, giúp tôi dễ dàng phân tích cấu trúc và tách lấy những dữ liệu cần thiết. Cụ thể là tôi sẽ sử dụng cURL để phân tích trang (sẽ đề cập ở phần sau).

Việc lọc dữ liệu từ cấu trúc trang sẽ giúp tôi lấy được ID thật sự của bài hát và từ đó tôi sẽ lấy được đường link nhạc trực tiếp của bài hát.

VD: Giả sử tôi có ID bài hát là MrHAuoG2xF thì bước tiếp theo tôi sẽ truy cập đến địa chỉ http://www.nhaccuatui.com/download/song/MrHAuoG2xF để có được đường link bài hát. Tất nhiên đường link này tồn tại trong một thời gian nào đó vì đó là biện pháp để chống thất thoát bandwidth của các trang nhạc.

Nói tới đây thì chắc các bạn đã hình dung phần nào công việc lấy đường dẫn link nhạc. Cũng đơn giản phải không nào ? Cái khó chỉ là việc phân tích cấu trúc trang như thế nào để lấy được ID thật sự của bài hát.

Lưu ý: Bài viết này được viết vào thời điểm mà việc lấy đường link nhạc trực tiếp vẫn tốt, bình thường với việc Demo đã được test kĩ. Nhưng sau này cấu trúc trang nhạc bị thay đổi để chống mất cắp ID bài hát thì thông tin trong bài viết này có thể sẽ bị sai lệch. Trong trường hợp đó, các bạn hãy comment để tôi sửa lại code nhé.

2, Lấy ID thật sự của bài hát

Sau khi đã phân tích kĩ ở trên, tôi sẽ đi vào phần trọng tâm với đoạn code lấy ID bài hát bằng cách phân tích cấu trúc trang với cURL

<?php
$title = trim(strtolower("con mua ngang qua"));
$number_of_pages = 1;
set_time_limit(0);
$output = array(
'error' => array(
'status' => true,
'message' => 'Not found.'
)
);
$mykey = 0;
for($page = 0; $page < $number_of_pages; $page++) {
$url = "http://m.nhaccuatui.com/tim-kiem/bai-hat?q=".urlencode($title)."&page=".$page;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
$result = curl_exec($ch);
curl_close($ch);
$result = strip_tags($result, "<h3><a><p><div>");
$result = preg_replace('/[\s]+/', ' ', str_replace(array("\n", "\r"), '', $result));
$result = str_replace('noborder', '', $result);
$pattern = '|<div class="row bgmusic\s*">\s*<h3>\s*<a href="[^"]+\.([a-zA-Z0-9_\-]+)\.html" title="([^<]*)">([^<]*)\s*<\/a>\s*<\/h3>\s* <p>([^<\d]*)([\d,\s]*)<\/p><\/div>|Ui';
$matches = "";
preg_match_all($pattern, $result, $matches);
if(!empty($matches[1])) {
$output['error'] = array(
'status' => false,
'message' => 'Successful'
);
foreach($matches[1] as $key => $val) {
$output['items'][$mykey]['song_id'] = $matches[1][$key];
$output['items'][$mykey]['artist'] = $matches[4][$key];
$output['items'][$mykey]['listen_number_count'] = $matches[5][$key];
$mykey++;
}
}
}
print_r($output);
?>

Mẹo nhỏ: Nếu các bạn đọc code kĩ thì sẽ thấy tôi sử dụng biến $number_of_pages = 1 ở dòng 3, thật ra thì tôi không muốn lấy dữ liệu nhiều nên chỉ lấy kết quả ở trang đầu tiên. Bạn có thể thay đổi số trang bạn muốn lấy với biến này.

Và đây là kết quả thu được

Array
(
[error] => Array
(
[status] =>
[message] => Successful
)
[items] => Array
(
[0] => Array
(
[song_id] => MrHAuoG2xF
[artist] => Young Pilots
[listen_number_count] => 125,613
)
[1] => Array
(
[song_id] => FX3YVLHu4b
[artist] => Hoà ng Kê
[listen_number_count] => 26,888
)
[2] => Array
(
[song_id] => iOnUwsIEbY
[artist] => HighKin
[listen_number_count] => 8,942
)
[3] => Array
(
[song_id] => d1wIqUImGecG
[artist] => Trần Thà nh Long
[listen_number_count] => 2,206
)
[4] => Array
(
[song_id] => QyFvewz1Pm3P
[artist] => Piano
[listen_number_count] => 256
)
[5] => Array
(
[song_id] => QP1yXtG5XuUm
[artist] => Spy
[listen_number_count] => 392
)
[6] => Array
(
[song_id] => Qf0iGs7nZnPZ
[artist] => Bờm
[listen_number_count] => 86
)
[7] => Array
(
[song_id] => 3HYi3QSDXT
[artist] => TP, M
[listen_number_count] => 12,390
)
[8] => Array
(
[song_id] => Nbusvks9CEGX
[artist] => Dual B
[listen_number_count] => 5,758
)
[9] => Array
(
[song_id] => mlucnxnGauCg
[artist] => Cloudy Hoà ng
[listen_number_count] => 3,152
)
)
)

3, Lấy link nhạc trực tiếp của bài hát

Sau khi đã có được ID thật sự của bài hát thì việc lấy thông tin mà cụ thể là đường link trực tiếp bài hát trở nên đơn giản hơn. Các bạn chỉ cần truy cập đến trang thông tin bài hát với cấu trúc như sau http://www.nhaccuatui.com/download/song/ + ID_bai_hat và phân tích JSON trả về là có được đường link bài hát.

Các bạn có thể tham khảo đoạn code mà tôi lấy dữ liệu sau khi phân tích JSON trả về

<?php
$song_id = "MrHAuoG2xF";
$url = "http://www.nhaccuatui.com/download/song/" . $song_id;
$json_data = array();
$json_data = json_decode(file_get_contents($url), true);
if(($json_data['error_message'] == 'Success') && ($json_data['error_code'] == 0)) {
if(!empty($json_data['data'])) {
$link_song_tmp = $json_data['data']['stream_url'];
echo "<br /><br />Link song: " . $link_song_tmp;
}
else {
echo "Invalid data.";
}
}
else {
echo $json_data['error_message'];
}
?>

4, Demo

Và đây là kết quả thu được khi chạy chương trình

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

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…