YouTube视频解析API源码 其他

admin 3月前 44

YouTube视频解析API源码,存储为.php文件调用即可

<?php

/**

*

* YouTuBe API

*

* @author DanMo <https://www.nslfuli.com/>

* @date 2018-08-18 19:42:30

* @version 0.26

*

*

*/

error_reporting(0);

header('Content-type: text/json;charset=utf-8');

$ui = array();

foreach($_GET as $key => $value){

$ui[$key] = trim($value);

}

if( empty($ui['vid']) ){

die('Please attach relevant parameters!');

}

define('VID',$ui['vid'] );

define('VIDEO_URL',"https://www.youtube.com/watch?v=");

define('YouTuBe_Api',"https://y2mate.com/zh-cn/analyze/ajax");

define('TEST_API_KEY', 'AIzaSyCOz5Yml_mICULfhM0s_u87l4MRvcL7_p0' );

define('API_KEY', 'AIzaSyBiMxVlkwUqqHbxVU3HJV3KcPFQPikfZwE' );

function https_curl($url,$params=false,$ispost=0){

$httpInfo = array();

$ch = curl_init();

curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );

curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );

curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );

curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt( $ch, CURLOPT_TIMEOUT , 60);

curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);

if( $ispost )

{

curl_setopt( $ch , CURLOPT_POST , true );

curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );

curl_setopt( $ch , CURLOPT_URL , $url );

}

else

{

if($params){

curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );

}else{

curl_setopt( $ch , CURLOPT_URL , $url);

}

}

$response = curl_exec( $ch );

if ($response === FALSE) {

//echo "cURL Error: " . curl_error($ch);

return false;

}

$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );

$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );

curl_close( $ch );

return $response;

}

function api_curl($url,$data){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($curl, CURLOPT_POSTFIELDS,$data);

curl_setopt($curl, CURLOPT_HEADER,0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($curl);

if (curl_errno($curl)) {

return 'ERROR '.curl_error($curl);

}

curl_close($curl);

return $response ;

}

$APIs = [

'categories.list' => 'https://www.googleapis.com/youtube/v3/videoCategories',

'videos.list' => 'https://www.googleapis.com/youtube/v3/videos',

'search.list' => 'https://www.googleapis.com/youtube/v3/search',

'channels.list' => 'https://www.googleapis.com/youtube/v3/channels',

'playlists.list' => 'https://www.googleapis.com/youtube/v3/playlists',

'playlistItems.list' => 'https://www.googleapis.com/youtube/v3/playlistItems',

'activities' => 'https://www.googleapis.com/youtube/v3/activities',

];

function getApi($name){

global $APIs;

return $APIs[$name]."?";

}

function _parse_url_path($url){

$array = parse_url($url);

return $array['path'];

}

function _parse_url_query($url){

$array = parse_url($url);

$query = $array['query'];

$queryParts = explode('&', $query);

$params = [];

foreach ($queryParts as $param) {

$item = explode('=', $param);

$params[$item[0]] = empty($item[1]) ? '' : $item[1];

}

return $params;

}

function getVideoInfo($vId, $part = ['id', 'snippet', 'contentDetails', 'player', 'statistics', 'status']){

$API_URL = getApi('videos.list');

$params = [

'id' => is_array($vId) ? implode(',', $vId) : $vId,

'key' => API_KEY,

'part' => implode(', ', $part),

];

return https_curl($API_URL,$params,0);

}

function getPageContent($id){

$page = 'http://www.youtube.com/watch?v='.$id;

$arr = array(

"ssl" => array(

"verify_peer" => false,

"verify_peer_name" => false,

),

);

$content = file_get_contents($page, false, stream_context_create($arr));

return $content;

}

function getDownloadLinks($id){

$videoMap = array(

"13" => array("3GP", "Low Quality - 176x144"),

"17" => array("3GP", "Medium Quality - 176x144"),

"36" => array("3GP", "High Quality - 320x240"),

"5" => array("FLV", "Low Quality - 400x226"),

"6" => array("FLV", "Medium Quality - 640x360"),

"34" => array("FLV", "Medium Quality - 640x360"),

"35" => array("FLV", "High Quality - 854x480"),

"43" => array("WEBM", "Low Quality - 640x360"),

"44" => array("WEBM", "Medium Quality - 854x480"),

"45" => array("WEBM", "High Quality - 1280x720"),

"18" => array("MP4", "Medium Quality - 480x360"),

"22" => array("MP4", "High Quality - 1280x720"),

"37" => array("MP4", "High Quality - 1920x1080"),

"38" => array("MP4", "High Quality - 4096x230")

);

$content = getPageContent($id);

$videos = array('MP4' => array(), 'FLV' => array(), '3GP' => array(), 'WEBM' => array());

if(preg_match("'\"url_encoded_fmt_stream_map\":\"(.*?)\"'si", $content, $r)){

$data = $r[1];

$data = explode(',', $data);

foreach($data As $cdata){

$cdata = str_replace('\u0026', '&', $cdata);

$cdata = explode('&', $cdata);

foreach($cdata As $xdata){

if(preg_match('/^sig/', $xdata)){

$sig = substr($xdata, 4);

}

if(preg_match('/^url/', $xdata)){

$url = substr($xdata, 4);

}

if(preg_match('/^itag/', $xdata)){

$type = substr($xdata, 5);

}

}

$url = urldecode($url);

$videos[$videoMap[$type][0]][$videoMap[$type][1]] = $url;

}

}

return $videos;

}

function format_bytes($size){

$units = array(' B', ' KB', ' MB', ' GB', ' TB');

for($i = 0; $size >= 1024 && $i < 4; $i++){

$size /= 1024;

}

return round($size, 2).$units[$i];

}

function itag($itag){

$stream_itag = array(

"38" =>"3072p",

"85" =>"1080p",

"46" =>"1080p",

"37" =>"1080p",

"102" =>"720p",

"45" =>"720p",

"84" =>"720p",

"22" =>"720p",

"120" =>"720p",

"44" =>"480p",

"35" =>"480p",

"101" =>"360p",

"100" =>"360p",

"43" =>"360p",

"34" =>"360p",

"82" =>"360p",

"18" =>"270p/360p",

"6" =>"270p",

"83" =>"240p",

"13" =>"144p",

"5" =>"240p",

"36" =>"240p",

"17" =>"144p"

);

//return $stream_itag[$itag];

parse_str($itag,$info);

return array(

'iTag' => $stream_itag[$info['itag']],//清晰度

//'Duration' => $info['dur'],//时间

'mt' => $info['expire'],//文件大小

'type' => $info['mime'] //文件形式

);

}

function compress_html_main($buffer){

$initial=strlen($buffer);

$buffer=explode("<!--html-->", $buffer);

$count=count ($buffer);

for ($i = 0; $i <= $count; $i++){

if (stristr($buffer[$i], '<!--html no compression-->')){

$buffer[$i]=(str_replace("<!--html no compression-->", " ", $buffer[$i]));

}else{

$buffer[$i]=(str_replace("\t", " ", $buffer[$i]));

$buffer[$i]=(str_replace("\n\n", "\n", $buffer[$i]));

$buffer[$i]=(str_replace("\n", "", $buffer[$i]));

$buffer[$i]=(str_replace("\r", "", $buffer[$i]));

while (stristr($buffer[$i], ' '))

{

$buffer[$i]=(str_replace(" ", " ", $buffer[$i]));

}

}

$buffer_out.=$buffer[$i];

}

return $buffer_out;

}

function returns($data){

global $ui;

return $ui['callback'] ? $ui['callback']."({$data})" : "Jquery_".bin2hex(base64_encode('sbtencentsbtencent'))."({$data})";

}

$params = [

'url' => VIDEO_URL.VID,

'ajax' => 1,

];

//$_loc1_ = json_decode(api_curl(YouTuBe_Api,$params),true);

$_loc1_ = json_decode(https_curl(YouTuBe_Api,$params,1),true);

preg_match('|<div class="tab-pane fade active in" id="mp4">(.*?)</div> <div class="tab-pane fade" id="mp3">|',compress_html_main($_loc1_['result']),$_loc2_);

preg_match("#data-vlink=\"(.*?)\" .*class=\"video-thumbnail\".* >#",compress_html_main($_loc1_['result']),$_loc3_);//默认播放

preg_match_all("#data-vlink=\"(.*?)\" >#",$_loc2_[1],$_loc4_);//视频链接

//preg_match_all("#</td> <td>(.*?)</td> <td class=\"txt-center\">#",$_loc2_[1],$_loc5_);//视频大小

foreach( $_loc4_[1] as $row ){

$vinfo = itag($row);

$video[] = array(

'url' => $row,

'itag' => $vinfo['iTag'],//清晰度

'mt' => $vinfo['mt'],//文件大小

'type' => $vinfo['type'] //文件形式

);

}

$_loc6_ = itag($_loc3_[1]);

$data = array(

'date' => gmdate("D M d Y h:i:s ")."GMT+0800 (中国标准时间)",

'api' => 'mtop.api.video.url.youtube.get',

'version' => '0.26',

'tip' => 'More than 1080 definition films and audio segmentation are not provided',

'result' => array(

'default' => array(

'url' => $_loc3_[1],

'itag' => $_loc6_['iTag'],//清晰度

'mt' => $_loc6_['mt'],//文件大小

'type' => $_loc6_['type'] //文件形式

),

'video' => $video,

)

);

//print_r( $_loc4_[1] );

//print_r( compress_html_main($_loc1_['result']) );

print_r( returns(json_encode($data)) );
最新回复 (0)
返回