Xin chào các bạn hôm nay mình sẽ giới thiệu đến các bạn cách làm Api get link video facebook bằng yii2 .

public function actionIndex() {
$link = $_GET ['url'];
$idVideo = FacebookController::get_id_facebook($link);
$ketqua = FacebookController::get_link_facebook($idVideo);
echo $ketqua;
}

Đầu tiên mình cần phải lấy id video bằng hàm get_id_facebook($link)


public function get_id_facebook($link) {
preg_match('/https:\/\/www.facebook.com\/(.*)\/videos\/(.*)\/(.*)\/(.*)/U', $link, $id); // link dạng https://www.facebook.com/userName/videos/vb.IDuser/IDvideo/?type=2&theater
if (isset($id [4])) {
$idVideo = $id [3];
} else {
preg_match('/https:\/\/www.facebook.com\/(.*)\/videos\/(.*)\/(.*)/U', $link, $id); // link dạng https://www.facebook.com/userName/videos/IDvideo
if (isset($id [3])) {
$idVideo = $id [2];
} else {

preg_match('/https:\/\/www.facebook.com\/video\.php\?v\=(.*)/', $link, $id); // link dạng https://www.facebook.com/video.php?v=IDvideo
$idVideo = $id [1];
$idVideo = substr($idVideo, 0, - 1);
}
}
return $idVideo;
}

Function trên giúp ta lấy được id của video.Tiếp theo bạn phải embel video .Vì mình làm api cho cả driver với google photo nên hàm curl mình tạo 1 file trong component để viết 1 lần dùng mãi mãi .Hàm curl mình viết ở trong mục common\components


<?php
// hàm curl xử lý get link
namespace common\components;
use yii\base\Component;
class UntilsComponents extends Component
{
public 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_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;
}
}

Trong FacebookControllers mình chỉ cần gọi hàm


$get = \common\components\UntilsComponents::curl($embed);

Ok giờ đến lúc chúng ta cần tách dữ liệu từ hàm curl về để lấy dữ liệu chúng ta cần đó là chất lượng hd và chất lượng sd


$data = explode('[["params","', $get); // tách chuỗi [["params"," thành mảng

$data = explode('"],["', $data[1]); // tách chuỗi "],[" thành mảng
$data = str_replace(
array('\u00257B', '\u00257D', '\u002522', '\u00253A', '\u00252C', '\u00255B', '\u00255D', '\u00255C\u00252F', '\u00252F', '\u00253F', '\u00253D', '\u002526'), array('{', '}', '"', ':', ',', '[', ']', '\/', '/', '?', '=', '&amp;amp;amp;'), $data[0]
); // thay thế các ký tự mã hóa thành ký tự đặc biệt
$data = json_decode($data); // decode chuỗi
$video_data = $data-&amp;amp;gt;video_data; // get video data
//var_dump($video_data);
$progressive = $video_data-&amp;amp;gt;progressive;
//var_dump($progressive);die;
$linkDownload = array();
if (isset($progressive-&amp;amp;gt;hd_src)) {
$linkDownload['720'] = $progressive-&amp;amp;gt;hd_src; // link download HD
}
if (isset($progressive-&amp;amp;gt;sd_src)) {
$linkDownload['360'] = $progressive-&amp;amp;gt;sd_src; // link download SD
}

Ở đây mình có thể lấy được 2 link hd và sd của 1 video .Tiếp theo chúng ta cần cho vào jwplay để xem có chạy được video không nhé các bạn .

<?php
$link ="http://api.hbsprogram.com/facebook/index?url=https://www.facebook.com/hoathinhhaycom/videos/1834889780076373/" ;
$linkDownload = json_decode(file_get_contents($link),True);

?>
<div id="driver">Loading the player...</div>
<script src="https://content.jwplatform.com/libraries/E4QWMS3Z.js"></script>
<script type="text/javascript">
 jwplayer("driver").setup({
 sources: [{ 
 file: '<?= $linkDownload['360'] ?>',
 type:"mp4",
 label:"360p",
 },{ 
 file: '<?= $linkDownload['720'] ?>',
 type:"mp4",
 label:"720p",
 default: "true",
 },
 ]
 });
</script>

Bạn có thể dùng api mà mình đã viết với cấu trúc như sau :http://api.hbsprogram.com/facebook/index?url=url_của_bạn để dùng nhé

Ví dụ trên đòi hỏi bạn phải thành thoại hàm curl và sự phân tích trang web để sử dụng tốt nhất .Có gì không hiểu các bạn có thể để lại comment dưới bài viết này để mình có thể giúp các bạn hiểu rõ hơn

 

Leave a Reply

Your email address will not be published. Required fields are marked *