Như bài trước : Hướng dẫn tải Video Facebook bằng tay

Thì bài này sẽ chia sẻ cho các bạn Script để lấy link trực tiếp luôn , không cần phải làm nhiều bước bằng tay như bài kia 😂

Demo Online

I.Cái này là gì ? 

Như các bạn đã biết  thì việc lấy link này (có thể) giống như các trang hỗ trợ tải Video từ Facebook đang dùng .

Đại khái là bạn chỉ cần Paste link Video vào và các trang này sẽ trả về kết quả là Link tải HD SD của video và kèm Tiêu đề Ảnh Thumbnail của Video

Ví dụ ở đây mình thử trên trang https://www.getfvid.com/ và link test sẽ là : https://www.facebook.com/VSBGPage/videos/350010588918260/

Và kết quả : 

🤣🤣🤣🤣

Đùa thôi , thử một link khác xem như thế nào : https://www.facebook.com/hhsb.vn/videos/849665919200515

Và đây là kết quả : 

Trong hình trên bạn có thể thấy có những thông tin như sau :

  • Tên Fanpage
  • Thumbnail Video
  • Mô tả Video
  • Link tải HD
  • Link tải SD
  • Link tải Audio (File âm thanh)

Vậy làm sao để lấy được những thông tin này , mời các bạn theo dõi ở bước sau .

II.Viết Code lấy

Vì mình chuyên dùng PHP nên mình sẽ để code ở ngôn ngữ này , các bạn dùng ngôn ngữ khác thì có thể tham khảo :

1.Lấy thông tin Video

* Lưu ý : Bắc buộc video phải là Video dạng Public , có nghĩa là phải dạng Công Khai , không đăng nhập vẫn xem được , không được là Video của Group kín .

Mình sẽ lấy lại link ở đầu bài là : https://www.facebook.com/VSBGPage/videos/350010588918260/ để test .

Ở đây mình dùng cUrl để lấy thông tin Video , code mẫu như sau :

<?php 

// Lấy thông tin trang Web qua cURl

$options = array(
		CURLOPT_RETURNTRANSFER => true,   
		CURLOPT_HEADER         => false, 
		CURLOPT_FOLLOWLOCATION => true,   
		CURLOPT_MAXREDIRS      => 10,
		CURLOPT_USERAGENT      => "facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)", // Do not Remove this line -> ko được xóa dòng này
		CURLOPT_AUTOREFERER    => true,   
		CURLOPT_CONNECTTIMEOUT => 120,    
		CURLOPT_TIMEOUT        => 120,    
	); 
	$ch = curl_init($url);
	curl_setopt_array($ch, $options);
	$content = curl_exec($ch);
	curl_close($ch);

* Note : Khi đã lấy thông tin Trang web thì bạn đang nắm giữ toàn bộ source code khi tải trang mà website này có - giống với việc bạn nhấn Ctrl + U để view-source một website nào đó .

Ok , bây giờ ta sẽ bóc tách các thành phần trong source này ra 

1.1 Lấy Tên Fanpage

Tên Fanpage được gộp với tên của Video

<title id="pageTitle">VSBG - hot girl đậu phụ | Facebook</title>

 

Dùng Regex để lấy tất cả String ở giữa 2 thẻ  <title id="pageTitle"></title>

<?php

$findPageName = preg_match_all('/<title id="pageTitle">([^"]*)<\/title>/', $content, $pageName);

Bạn hãy thử copy Source có được sau khi cURL và truy cập vào website : https://regex101.com/ để test thử

Kết quả :

Các bạn có thể thấy , tên Fanpge được ngăn cách bởi dấu "-" đầu tiên . vì thế thêm hàm explore để lấy chuỗi đầu tiên của mảng nhé

<?php

$pageName = !empty($pageName[1][0]) ? explode("-",$pageName[1][0]) : null;

echo !empty($pageName[0]) ? $pageName[0] : "That Bai";

// Ket qua : "VSBG" neu thanh cong , "That bai" neu sai 

1.2 Lấy Thumbail Video 

Tương tự như bước trên , dùng Regex để tach từ source lấy được và bỏ dấu "\" ra khỏi chuỗi

<?php

  $findThumbnail        = preg_match_all('/"thumbnailUrl":"([^"]*)"/', $content, $thumbnail);

// str_replace("\\","",$thumbnail[1][0]) -> Bo dau \ ra khoi chuoi

 

1.3 Lấy Mô tả video

Mô tả Video sẽ nằm giữa thẻ 

<div data-testid="post_message" class="_5pbx userContent _3576" data-ft="&#123;&quot;tn&quot;:&quot;K&quot;&#125;"><p>NỘI DUNG MO TẢ VIDEO</p></div>

Code : 

<?php

	$findVideoDescription = preg_match_all('/<div data-testid="post_message" class="_5pbx userContent _3576" data-ft="&#123;&quot;tn&quot;:&quot;K&quot;&#125;"><p>(.*)<\/p><\/div>/s', $content, $videoDescription);

*Lưu ý : Vì dữ liệu sau khi lấy được sẽ kèm cả HTML , nên vì thế các bạn nhớ strip_tags để loại bỏ nó đi nhé

1.4 Lấy Link tải SD

Link tải SD của Video nằm giữa thẻ sd_src:"

Code : 

<?php 

$findSD = preg_match_all('/sd_src:"([^"]*)"/', $content, $sd);

1.5 Lấy Link tải HD

Tương tự như SD , HD nằm trong thẻ hd_src:"

1.6 Lấy Link tải file Audio (Âm thanh)

Lấy Audio thì hơi nhiều bước đó bạn phải lấy được chuỗi chứa các file âm thanh và tách file đầu tiên ra .

Bước 1  : Lấy tất cả trong thẻ ,audio:

Code : 

<?php

$findAudio = preg_match_all('/,audio:\[(.*?)\]/sm', $content, $audio,PREG_SET_ORDER, 0);

Bước 2 : Bỏ thẻ ,audio: bằng str_replace

<?php

$audioString = str_replace(",audio:","",$audio[0][0]);

Bước 3 : Lấy chuỗi url đầu tiên 

<?php

$audioFirstUrl = preg_match('/{url:"(.*?)\",/',$audioString,$audio,PREG_OFFSET_CAPTURE, 0);

Và thế là bạn đã có được file Audio 

II. Tổng hợp Code

Kết hợp tất cả các đoạn trên và bỏ vào một Function , ta sẽ có đoạn code đơn gian như sau :

<?php 
/* Share on httzip.com
*/
ini_set('display_errors', 'Off');

function getVideo($url) {
	$options = array(
		CURLOPT_RETURNTRANSFER => true,   
		CURLOPT_HEADER         => false, 
		CURLOPT_FOLLOWLOCATION => true,   
		CURLOPT_MAXREDIRS      => 10,
		CURLOPT_USERAGENT      => "facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)", // Do not Remove this line
		CURLOPT_AUTOREFERER    => true,   
		CURLOPT_CONNECTTIMEOUT => 120,    
		CURLOPT_TIMEOUT        => 120,    
	); 
	$ch = curl_init($url);
	curl_setopt_array($ch, $options);
	$content = curl_exec($ch);
	curl_close($ch);

	$findHD = preg_match_all('/hd_src:"([^"]*)"/', $content, $hd);
	$findSD = preg_match_all('/sd_src:"([^"]*)"/', $content, $sd);

	$findAudio = preg_match_all('/,audio:\[(.*?)\]/sm', $content, $audio,PREG_SET_ORDER, 0);

    /*Extract Audio*/
	$audioString = str_replace(",audio:","",$audio[0][0]);
	$audioFirstUrl = preg_match('/{url:"(.*?)\",/',$audioString,$audio,PREG_OFFSET_CAPTURE, 0);
    /*End Extract Audio*/

 $findThumbnail        = preg_match_all('/"thumbnailUrl":"([^"]*)"/', $content, $thumbnail);
	$findTitle = preg_match_all('/<meta property="og:title" content="([^"]*)"/', $content, $title);
	$findPageName = preg_match_all('/<title id="pageTitle">([^"]*)<\/title>/', $content, $pageName);
	$findVideoDescription = preg_match_all('/<div data-testid="post_message" class="_5pbx userContent _3576" data-ft="&#123;&quot;tn&quot;:&quot;K&quot;&#125;"><p>(.*)<\/p><\/div>/s', $content, $videoDescription);

	$hd = !empty($hd[1][0]) ? $hd[1][0] : null;
	$sd = !empty($sd[1][0]) ? $sd[1][0] : null;
	$audio = !empty($audio[1][0]) ? $audio[1][0] : null;
	$thumbnail   = !empty($thumbnail[1][0]) ? str_replace("\\","",$thumbnail[1][0]) : null;
	$description = !empty($videoDescription[1][0]) ? strip_tags($videoDescription[1][0]) : null;
	$title = !empty($title[1][0]) ? $title[1][0] : null;
	$pageName = !empty($pageName[1][0]) ? explode("-",$pageName[1][0]) : null;


	// Output
    $oData = [
        "hd_src" => $hd,
        "sd_src" => $sd,
        "audio" => $audio,
        "thumbnail"     => $thumbnail,
        "desc"      => $description,
        "title"     => $title,
        "page_name" => $pageName[0]
    ];

    return json_encode($oData);

}
echo ( getVideo("https://www.facebook.com/VSBGPage/videos/350010588918260/"));  // Change your facebook video url

?>

III. Làm sao để chạy?

1. Chạy dưới Localhost máy của bạn .

Ví dụ ở đây mình dùng XAMPP :

  1. Tạo mới một thư mục trong 
  2. Tạo một file .php
  3. Copy code trên vào
  4. Thay link ở echo getVideo() thành link bạn muốn tải
  5. Nhớ khởi động Apache và chạy

2. Chạy trên Hosting

  1. Tạo thư mục ở Thư mục Mặc định của bạn 
  2. Tạo một file hoặc thư mục nào đó
  3. Copy code trên vào
  4. Thay link ở echo getVideo() thành link bạn muốn tải
  5. Truy cập vào link file bạn vừa tạo 

Và đây là kết quả : 

III. Kết thúc

Cảm ơn các bạn đã đọc bài viết này , nếu có thắc mắc gì , hãy để lại bình luận bên dưới nhé .

Link Gist cho anh em nào cần : https://gist.github.com/httzipdev/3ae49d7fc110dfc496b085371788878d

 

Chúc các bạn thành công !

 


Tùng
Web Developer

vjp pr0

Bình luận bài viết


0 bình luận

Hãy là người đầu tiên bình luận
Bình luận đã đóng