Demo Tool get link video tv.zing.vn: Demo
Chúng ta cùng bắt đầu thực hiện.
Get link video mp4 của tv.zing.vn thì có khá nhiều cách để làm. Có 1 cách đơn giản nhất cho các bạn đó là view-source link video đó, rồi tìm với từ khóa “.mp4“, cách thứ 2 là tìm file xml lưu thông tin video mà đọc file đó. Ta bắt đầu thực hiện các cách:
1. Get link video bằng cách view-source
Ví dụ link: http://tv.zing.vn/video/Ghien-Mi-Go-Tap-41-Cu-Soc-La-Se-Ra/IWZBB9WA.html
Các bạn view-source nó rồi nhấn Ctrl+F, gõ “.mp4” các bạn sẽ thấy các link mp4 của nó như trong hình
Đây là cách lấy link khá dễ dàng, như hướng dẫn trên thì bạn sẽ làm thủ công, còn nếu code php thì hướng làm sẽ như sau:
Dùng cURL để đọc trang.
Dùng preg_match_all để lọc các link mp4 ra và dựa vào data-res=”360/480″ để lấy chất lượng video
Đây là code php preg_match_all để lấy link mp4:
$data = curl($link);
preg_match_all('/<source src\=\"(.*?)\" type\=\"video\/mp4\" data\-res\=\"(.*?)\"\/\>/',$data,$arr_preg);
2. Get video bằng file xml
Như cách 1, bạn view-source rồi tìm với từ khóa “xml“, bạn sẽ thấy có link file xml: http://tv.zing.vn/tv/xml/media/LGJnyZQscChtCDxGTBhHtDGZG
Trong file này nó lưu các thông tin của video như title, performer, image, source, f720, f480. f720 bị ẩn do nó đòi hỏi acc vip, cái source(mình đã có cách get được video 720p, đã update ở cuối bài), f480 chính là link mp4 nhưng đã được mã hóa. Mình sẽ hướng dẫn cách giải mã sau, giờ chúng ta cùng thực hiện từng bước:
Đầu tiên chúng ta cần function curl, cái này không thể thiếu rồi:
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;
}
Và đây là function getMp4:
function getMp4($link){
$return = array();
$data = curl($link); // đọc dữ liệu link
preg_match('/http\:\/\/tv\.zing\.vn\/tv\/xml\/media\/(.*)"/', $data, $arr_preg); // tìm link xml
$link_xml = str_replace('"','',$arr_preg[0]); // xóa dấu " trong link xml tìm được
$xml_data = curl($link_xml); // đọc dữ liệu link xml
$xml_string = str_replace("<![CDATA[","",$xml_data); // loại bỏ <![CDATA[ $xml_string = str_replace("]]>","",$xml_string); // loại bỏ ]]>
$xml_string = preg_replace('#&(?=[a-z_0-9]+=)#', '&', $xml_string); // chuyển đổi các ký tự đặc biệt
$xml_arr = json_decode(json_encode((array) simplexml_load_string($xml_string)), 1); // chuyển đôi xml sang array
if($xml_arr['item']){ // kiểm tra $xml_arr['item'] có không
$item = $xml_arr['item'];
$return['title'] = $item['title']; // title
$return['performer'] = $item['performer']; // performer
$return['image'] = $item['cover']; // cover
$return['360p'] = decodeCrypt($item['source']); // decode Crypt chuỗi tìm được
$return['480p'] = decodeCrypt($item['f480']); // decode Crypt chuỗi tìm được
$return['720p'] = $item['f720'];
}
return $return;
}
Mình đã comment hướng dẫn từng dòng code rồi nên sẽ không nói chi tiết nữa, các bạn để ý mình có sử dụng function decodeCrypt để lấy get được link mp4:
$return['360p'] = decodeCrypt($item['source']); // encode chuỗi tìm được
$return['480p'] = decodeCrypt($item['f480']); // encode chuỗi tìm được
Hiện tại file xml này đã không còn mã hóa nữa nên các bạn có thể bỏ function decodeCrypt ra không cần nữa
$return['360p'] = $item['source'];Nếu thời điểm bạn get link mà nó mã hóa thì bỏ function decodeCrypt vào để get link.
$return['480p'] = $item['f480'];
function decodeCrypt này được share trên sinhvienit.net, mình đã rút gọn nó lại:
function decodeCrypt($text){Như vậy là xong bạn chỉ cần bỏ link vào function getMp4($link) thì nó sẽ về cho bạn các thông tin của video đó.
$key = 'f_pk_ZingTV_1_@z';
$iv = 'f_iv_ZingTV_1_@z';
if($text != ''){
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv_size = mcrypt_enc_get_iv_size($cipher);
if(mcrypt_generic_init($cipher, $key, $iv) != -1){
$char = '';
for($i=0; $i<strlen($text);$i+=2){
$char .= chr(hexdec($text{$i}.$text{($i+1)}));
}
$cipherText = mdecrypt_generic($cipher,$char);
mcrypt_generic_deinit($cipher);
return $cipherText;
}else{
return false;
}
}
}
UPDATE: Cách get link 720p trang tv.zing.vn
Như bạn đã biết mỗi bài viết trên website đều có 1 id riêng và trang tv zing cũng vậy, đoạn mình bôi đỏ chính là ID của video:
http://tv.zing.vn/video/Ghien-Mi-Go-Tap-41-Cu-Soc-La-Se-Ra/IWZBB9WA.html
Ta có link embed của video: http://tv.zing.vn/embed/video/IWZBB9WA
Bạn view-source link này ra sẽ tìm thấy link xml media embed: http://tv.zing.vn/tv/xml/media-embed/kncGTkQNJhCtdCHyvnkH?
Khi truy cập vào link đó thì sẽ thấy thông tin của video này, trong đó chứa cả video định dạng 720p.
Vậy cách làm cũng tương tự như trên, funtion này mình chỉnh sửa lại từ fuction getMp4 trên:
function getMp4HD($link){
$return = array();
$regex_link = '/http\:\/\/tv\.zing\.vn\/video\/(.*)\/(.*).html/';
if (preg_match($regex_link, $link, $getID)) { // lấy ID video
$idVideo = $getID[2]; // id video
$linkEmbel = 'http://tv.zing.vn/embed/video/'.$idVideo; // add id video vào link embed
$data = curl($linkEmbel); // đọc trang embel
preg_match('/http\:\/\/tv\.zing\.vn\/tv\/xml\/media\-embed\/(.*)"/', $data, $arr_preg); // lấy link xml media embed
$link_xml = str_replace('"','',$arr_preg[0]); // xóa bỏ " trong link
$xml_data = curl($link_xml); // đọc trang xml
$xml_string = str_replace("<![CDATA[","",$xml_data); // loại bỏ <![CDATA[ $xml_string = str_replace("]]>","",$xml_string); // loại bỏ ]]>
$xml_string = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $xml_string); // chuyển đổi ký tự đặc biệt
$xml_arr = json_decode(json_encode((array) simplexml_load_string($xml_string)), 1); // chuyển thành mảng
if($xml_arr['item']){
$item = $xml_arr['item'];
$return['title'] = $item['title'];
$return['performer'] = $item['performer'];
$return['image'] = $item['cover'];
$return['360p'] = decodeCrypt($item['source']); // encode chuỗi tìm được
$return['480p'] = decodeCrypt($item['f480']); // encode chuỗi tìm được
$return['720p'] = decodeCrypt($item['f720']); // encode chuỗi tìm được
}
}
return $return;
}
Nguồn:blogit.vn
0 nhận xét:
Đăng nhận xét