搜狐视频解析源码

作者 : King 本文共15393个字,预计阅读时间需要39分钟 发布时间: 2024-10-4 共471人阅读

搜狐视频解析源码

搜狐视频解析源码

 $ids = Sohu::parse($url);if (GlobalBase::is_ipad()) {if($ids["drm"]){echo json_encode(Sohu::get_vip_video_url($ids));}else{echo json_encode(Sohu::get_video_phone_playinfo($ids["vid"]));}}else{if ($ids['drm']) {echo json_encode(Sohu::get_vip_video_url($ids));} else {echo json_encode(Sohu::get_tv_data($ids));}}class Sohu{public static function parse($url){if (strstr($url,"film.sohu.com")==true) {$content = self::curl($url);preg_match('#data-vid="(.*?)"#',$content,$vid);$vid = $vid[1];$drm = 1;} elseif (strstr($url,"tv.sohu.com")==true) {$content = self::curl($url);preg_match('#var vid="(.*?)"#',$content,$vids);preg_match('#var playlistId="(.*?)"#',$content,$plids);preg_match('#var videoIsFee = "(.*?)"#',$content,$videoIsFee);preg_match('#var nid = "(.*?)"#',$content,$nids);preg_match('#var tvid = "(.*?)"#',$content,$tvids);$vid = $vids[1];$pid = $plids[1];$nid = $nids[1];$tvid = $tvids[1];$drm = $videoIsFee[1];//是否付费}$ids['vid'] = $vid;$ids['tvid'] = !empty($tvid)? $tvid :'';$ids['pid'] = !empty($pid)? $pid :'';$ids['drm'] = !empty($drm)? $drm :'';$ids['poster'] = !empty($poster)? $poster :'';$ids['aid'] = !empty($aid)? $aid :'';$ids['url'] = $url;//print_r($ids);exit;return $ids;}/*** [get_mkey 获取会员视频 mkey]* @param [type] $ids [description]* @return [type] [description]*/public static function get_mkey($ids){$time = number_format(microtime(true),3,'','');$vid = $ids["vid"];$aid = empty($ids["pid"]) ? "123456" : $ids["pid"];$api = "http://api.store.sohu.com/film/pc/checkpermission?aid={$aid}&vid={$vid}&passport=ppag82224eac4c7e@sohu.com&scuser=1&t={$time}";$content = self::curl($api,COOKIE_SOHU);$data = json_decode($content,true);if(isset($data["data"]["mkey"])){return "&mkey=".$data["data"]["mkey"];}else{return "";}}#===============================================================================================================================#在链接的接口添加&ca=4&prod=h5&uid=15069517297961037536 此数据自己写 fuid:15069517297961037536 1704291352423486#友情提示:UID参数需上报才能解决不限速播放/*** [get_sub_video_url 获取分段视频地址,组建列表文件]* @param [type] $vid [description]* @return [type] [description]*/public static function get_sub_video_url($ids){$vid = $ids["vid"];$uid = "15332173217091069576";$mkey = $ids["drm"] ? self::get_mkey($ids) : "";$url = "http://hot.vrs.sohu.com/vrs_flash.action?vid={$vid}&uid={$uid}".$mkey;$content = self::curl($url);//print_r($content);exit;$body = json_decode($content,true);if($body['status']!=1){$videoinfo['code'] = 404;$videoinfo['msg'] = $ids['titie'] .'视频正在加载···请稍后···';$videoinfo['play'] = 'url';$videoinfo["url"] = '../yun/?url='.$ids['url'];return $videoinfo;exit;}//===============================================================$video_infos = array();$videos = array();$allot = $body['allot'];//视频 host 分服务器$prot = $body['prot'];//视频分服务器端口$data = $body['data'];$totalDuration = $data['totalDuration'];//视频文件总时间$totalBytes = $data['totalBytes'];//视频文件总大小/* $video_json["poster"] = $data['coverImg'];//封面图片$preview = "http://".$_SERVER['HTTP_HOST']."/vip/preview.php?url=".$body['pvpic']['big'];$num = $totalDuration/1500;for ($i=0; $i <= $num; $i++) { $p_file[$i] = $preview."&id=".($i+1); } $video_json["preview"] = array("file"=>$p_file,"scale"=>15); //视频预览图 */$eP = $data['eP'];if(!empty($eP)){$_tmp['words'] = $_tmp['time'] = '';foreach ($eP as $key => $value) {$_tmp['time'] .= (int)$value['k'].',';$_tmp['words'] .= $value['v'].',';}$_tmp['words'] = substr($_tmp['words'],0,strlen($_tmp['words'])-1);$_tmp['time'] = substr($_tmp['time'],0,strlen($_tmp['time'])-1);$videoinfo["data"]["prompt"] = $_tmp;}$video_json["poster"] = $data['coverImg'];//封面图片$su = $data['su'];$ck = $data['ck'];$clipsURL = $data['clipsURL'];$clipsBytes = $data['clipsBytes'];$clipsDuration = $data['clipsDuration'];foreach ($clipsURL as $key => $value) {$url = $value;//$clipsURL[$key];$url = str_replace("http://data.vod.itc.cn","",$url);$bytes = $clipsBytes[$key];$duration = $clipsDuration[$key];$s_su = $su[$key];$vurl = "http://data.vod.itc.cn/?new={$s_su}&vid={$vid}&plat=17{$mkey}&user=api&uid={$uid}&prod=ad";//$vur = "https://vipgdbgp.vod.tv.itc.cn/cdnList?new=/103/106/I93AhPtwJQnB9uZXUudHNL.mp4&vid=2600794&uid=15332173217091069576&tvid=1782158&ch=tv&sz=1519_500&md=D4RIFFtgDFWWBmm0lI4lfeaLFSBgehlOcymhng==140&prod=flash&pt=1&uuid=23ec3e46-0bd9-fdd6-d9ee-fff9d3f9ccbf";$video["file"] = $vurl; //分段视频地址$video["duration"] = $duration; //分段视频时间$video["bytesTotal"] = $bytes; //分段视频文件大小$videos[$key] = $video;}$video_info["video"] = $videos;$video_info["type"] = "mp4";$video_info["weight"] = 10;$video_info["definition"] = "高清";$video_infos[count($video_infos)] = $video_info;$videoinfo['code'] = 200;$videoinfo['data']["flashplayer"] = true;$videoinfo['data']["video"] = $video_infos;self::get_report_urls($uid);//向服务器上报return $videoinfo;}/*获取VIP视频*/public static function get_vip_video_url($ids){$uid = '1529490073633502';// print_r($ids);exit;$video_infos = array();$data = array();$api = 'https://api.tv.sohu.com/v4/video/info/'.$ids['vid'].'.json?site=1&appid=tv&aid=123221&api_key=f351515304020cad28c92f70f002261c&plat=17&sver=1.0&partner=1&uid='.$uid.'&muid='.$uid.'&_c=1&pt=1&qd=680&src=11050001';$_data = self::curl($api);$_tmp['data'] = json_decode($_data,true);if($_tmp['data']['status']!=200){return "";}$ids['poster'] = !empty($_tmp['data']['data']['hor_w16_pic']) ? $_tmp['data']['data']['hor_w16_pic'] : $_tmp['data']['data']['hor_w8_pic'];//封面图片$ids['title'] = !empty($_tmp['data']['data']['video_name']) ? $_tmp['data']['data']['video_name'] : '';if(!empty($_tmp['data']['data']['ep'])){$_tmp['words'] = $_tmp['time'] = '';foreach ($_tmp['data']['data']['ep'] as $key => $value) {$_tmp['time'] .= (int)$value['k'].',';$_tmp['words'] .= $value['v'].',';}$_tmp['words'] = substr($_tmp['words'],0,strlen($_tmp['words'])-1);$_tmp['time'] = substr($_tmp['time'],0,strlen($_tmp['time'])-1);$videoinfo["prompt"] = $_tmp;$videoinfo["prompt"]['data'] = null;}if ($_tmp['data']['data']['url_nor_mp4']) {$data['0']['type'] = 'sd';$data['0']['bytes'] = explode(',',$_tmp['data']['data']['clips_bytes_nor']);$data['0']['duration'] = explode(',',$_tmp['data']['data']['clips_duration_nor']);$data['0']['mp4'] = explode(',',$_tmp['data']['data']['url_nor_mp4']);}if ($_tmp['data']['data']['url_high_mp4']) {$data['1']['type'] = 'hd';$data['1']['bytes'] = explode(',',$_tmp['data']['data']['clips_bytes_high']);$data['1']['duration'] = explode(',',$_tmp['data']['data']['clips_duration_high']);$data['1']['mp4'] = explode(',',$_tmp['data']['data']['url_high_mp4']);}if ($_tmp['data']['data']['url_super_mp4']) {$data['2']['type'] = 'vhd';$data['2']['bytes'] = explode(',',$_tmp['data']['data']['clips_bytes_super']);$data['2']['duration'] = explode(',',$_tmp['data']['data']['clips_duration_super']);$data['2']['mp4'] = explode(',',$_tmp['data']['data']['url_super_mp4']);}if ($_tmp['data']['data']['url_original_mp4']) {$data['3']['type'] = 'shd';$data['3']['bytes'] = explode(',',$_tmp['data']['data']['clips_bytes_original']);$data['3']['duration'] = explode(',',$_tmp['data']['data']['clips_duration_original']);$data['3']['mp4'] = explode(',',$_tmp['data']['data']['url_original_mp4']);}$_tmp['duration'] = explode(',', $_tmp['data']['data']['clips_duration_super']);$_tmp['bytes'] = explode(',', $_tmp['data']['data']['clips_bytes_super']);$_tmp['video'] = explode(',', $_tmp['data']['data']['url_super_mp4']);foreach ($data as $key => $value) {// print_r($value);exit;switch ($value['type']) {case "sd": $type = "mp4";$def = "标清"; break; # 640 & 248case "hd": $type = "mp4";$def = "高清"; break; #1024 & 430case "shd": $type = "mp4";$def = "原画"; break; #1920 * 808case "vhd": $type = "mp4";$def = "超清"; break; #1280 * 538}foreach ($value['mp4'] as $k => $v) {$video["file"] = $value['mp4'][$k].'&uid='.$uid.'&qd=68001&src=11050001&ca=4&cateCode=101&_c=1&appid=tv&oth=&cd=&prod=h5'; //分段视频地址$video["duration"] = $value['duration'][$k]; //分段视频时间$video["bytesTotal"] = $value['bytes'][$k]; //分段视频文件大小$videos[$k] = $video;}$video_info["video"] = $videos;$video_info["type"] = "mp4";$video_info["weight"] = $value['type'] != 'hd' ? 0:10;$video_info["definition"] = $def;$video_infos[count($video_infos)] = $video_info;if (isset($_REQUEST['pangu']) && $_REQUEST['pangu'] == 'parse') {$videoinfo["flashplayer"] = true;$videoinfo["poster"] = $ids['poster'];$videoinfo["title"] = $ids['title'];$videoinfo["video"] = $video_infos;} else {$videoinfo['code'] = 200;$videoinfo["data"]["flashplayer"] = true;$videoinfo["data"]["poster"] = $ids['poster'];$videoinfo["title"] = $ids['title'];$videoinfo["data"]["video"] = $video_infos;}}$ids['i_url'] = !empty($_tmp['data']['data']['download_url']) ? $_tmp['data']['data']['download_url'].'&vid='.$ids['vid'].'&uid=1704291352423486&plat=17&SOHUSVP=YGJx1z7gDAHdUUPlK2mQOFbvUzK7xZdoqWcqoErv_08&pt=5&prod=h5&pg=1&eye=0&cv=1.0.0&qd=68000&src=11060001&ca=4&cateCode=101&_c=1&appid=tv' : '';self::get_report_urls($uid);//向服务器上报if (GlobalBase::is_ipad()) {$url = get_headers($ids["i_url"], TRUE);$i_pid["data"]["url"] = !empty($url['Location']) ? $url['Location'] : null;$i_pid["type"] = "sohu";$i_pid["play"] = "html5";$i_pid["code"] = 200;return $i_pid;}else{return $videoinfo;}//print_r($_tmp['video']);exit;//http://data.vod.itc.cn/?k=tWaizEIOfJWHWJb4l2PA0LWRgTet8TdLbLElyTXXuTdWN4xHqM14r&a=XfGFjpCGqAOL4p3Cj6O3XUaAz95d4EOLsHJlsUIAoD2sWY6sWYbSqM9Auh2gqtkOzKA4R8etqSovNtcb0DWBWS9moeNUetCBW4c4TJoVqTPcWh1sfhAtfOesWZ&vid=2643421&uid=1704291352423486&plat=17&SOHUSVP=YGJx1z7gDAHdUUPlK2mQOFbvUzK7xZdoqWcqoErv_08&pt=5&prod=h5&pg=1&eye=0&cv=1.0.0&qd=68000&src=11060001&ca=4&cateCode=101&_c=1&appid=tv//http://data.vod.itc.cn/?k=tWaizEIXWJcOfJAHehAebDALTpksqBe3hS8NfGb4gK12bFXUyYk&a=XfGFjpCGqAOL4p3Cj6O3XUaAz95d4EOLsHJlsUIAoD2sWY6sWh1SqM9Auh2VbJbtDTKCg4wl0YAdbe6IZqp0aIm8684We9XfVwLgYWS0mEAZD6sfYvXfJNXWYO}public static function get_video_phone_playinfo($vid){$uid = "1704291352423486";$time = number_format(microtime(true),3,'','');$api = "http://m.tv.sohu.com/phone_playinfo?vid={$vid}&site=1&appid=tv&api_key=f351515304020cad28c92f70f002261c&plat=17&sver=1.0&partner=1&uid={$uid}&muid=1508052529396230&_c=1&pt=5&qd=680&src=11060001&ssl=2&_={$time}";/*https://m.tv.sohu.com/phone_playinfo?vid=4819265&site=1&appid=tv&api_key=f351515304020cad28c92f70f002261c&plat=17&sver=1.0&partner=1&uid=1805111229294297&muid=1529507168363105&_c=1&pt=3&qd=680&src=11060001&ssl=1&_=1529507168644*/$content = self::curl($api);$content = mb_check_encoding($content,'gbk')?iconv('gbk','utf-8//IGNORE',$content):$content;//将字符串的编码从gbk转到UTF-8$body = json_decode($content,true);//print_r(json_encode($body));exit;$data = $body['data'];$title = $data['video_name'];//视频标题$urls = $data['urls'];//视频文件列表$vurl = get_headers($urls["downloadUrl"][0][0], TRUE);$m3u8s = $urls["m3u8"];$m3u8 = $m3u8s["sup"][0];$videoinfo['code'] = 200;$videoinfo["data"]["url"] = $vurl['Location'];$videoinfo["play"] = "html5";$videoinfo["type"] = 'sohu';self::get_report_urls($uid);//向服务器上报return $videoinfo;}public static function get_tv_data($ids) //搜狐TV 接口{$uid = "02ffff10741010a17686c5e2232479fd2626b6b301207a";$headers = array('model:oppo+R11','pgid:x010741502ff0e2b179d2343d0002a0dac44a58b7b6f','packageName: com.sohuott.tv.vod','version_sdk_int: 19','cpu: armeabi-v7a','partnerNo: 80151101','service_version: 2.5.1','ip: 172.17.99.15','productId: 11','fingerprint: vivo%2Fvivo+v3%2Fx86%3A4.4.2%2FLMY48Z%2F3.8.017.1102%3Auser%2Frelease-keys%2Fqcom%2FG750-T00','plat: 15','model_id: LMY48Z','manufacturer: oppe','api_key: 4eda5b5735fb430b2e8dfba6c003941b','company: snm','gid: 02ffff10741010a17686c5e2232479fd2626b6b301207a','pappid: 107415','ua: Mozilla/5.0 (Linux; Android 4.4.2; oppo R11 Build/LMY48Z) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36','brand: vivo','app_id: 22','android_system_version: 4.4.2','sver: 6.5.2');$api = 'http://api.ott.tv.snmsohu.aisee.tv/ott-api-v4/v4/video/videoInfo.json?partner=80151101&aid='.$ids['pid'].'&h265=0&dts=0&tvVerId='.$ids['vid'];//$api = 'http://api.ott.tv.snmsohu.aisee.tv/ott-api-v4/v4/album/videos.json?albumId=9434506&type=0&sortOrder=1&partner=80151101&page=1&pageSize=10';$ids['ua'] = 'okhttp/3.4.1';$ids['httpheader'] = $headers;$ids['ip'] = '172.17.99.15';$data = self::curl($api,$ids);$data = json_decode($data,true);$videolist = $data['data']['playInfo'];$ids['poster'] = !empty($data['data']['videoExtendsPic_640_360']) ? $data['data']['videoExtendsPic_640_360'] : $data['data']['videoExtendsPic_320_180'];//print_r($data);exit;$count = 0;foreach ($videolist as $key => $value) {if ($value['versionId'] == 2 || $value['versionId'] == 31 ) {continue;}$video[0] = $value['vrUrl'];$video[1] = "video/m3u8";$video[2] = $value['name'];$video[3] = $value['versionId'] == 21 ? 10: 0;$videoinfo1["video"][$count] = $video;$count++;}if (isset($_REQUEST['pangu']) && $_REQUEST['pangu'] == 'parse') {$videoinfo["flashplayer"] = true;$videoinfo["poster"] = $ids['poster'];$videoinfo["title"] = $ids['title'];$videoinfo["video"] = $videoinfo1["video"];} else {$videoinfo['code'] = 200;$videoinfo["data"]["flashplayer"] = true;$videoinfo["data"]["poster"] = $ids['poster'];$videoinfo["title"] = $ids['title'];$videoinfo["data"]["video"] = $videoinfo1["video"];}self::get_report_urls($uid);//向服务器上报return $videoinfo;}public static function get_report_urls($uid){$time = time();//$report_urls = "http://mb.hd.sohu.com.cn/mc.gif?uid={$uid}&url=1002&value=&memo=%7B%22status%22%3A%220%22%7D&passport=&mtype=12<ype=0&cv=3.7.0&mos=3&mosv=10.0.15063.674&pro=1&mfo=To+Be+Filled+By+O.E.M.&mfov=To+Be+Filled+By+O.E.M.&webtype=wifi&vid=&time={$time}&type=&channelid=419&sim=0&playlistid=&catecode=&preid=&newuser=0&enterid=0&startid={$time}";//file_get_contents($report_urls,false,stream_context_create(array('http'=>array('method'=>'GET','timeout'=>3))));$report_urls = "https://z.m.tv.sohu.com/h5_cc.gif?t={$time}&uid={$uid}&position=ad_request_new&op=click&details=%7B%7D&nid=&url=http%3A%2F%2Ftv.sohu.com%2Fupload%2Fstatic%2Fshare%2Fshare_play.html%23_6457518_0_2_1&refer=&screen=1326x550&os=android&platform=android&passport=&vid=&pid=&channeled=1211010000&MTV_SRC=11050001";file_get_contents($report_urls,false,stream_context_create(array('http'=>array('method'=>'GET','timeout'=>3))));//$report_urls = "https://z.m.tv.sohu.com/pv.gif?url=https%253A%252F%252Fm.tv.sohu.com%252F20161027%252Fn471587159.shtml&refer=http%253A%252F%252Ftv.sohu.com%252F20161027%252Fn471587159.shtml&uid=1704291352423486&webtype=2g&screen=1326x550&catecode=101112%3B101124&pid=9174927&vid=3349737&tvid=85617187&site=1&os=android&platform=android&passport=957099461778374656%40sohu.com&t=1517025723446&channeled=1211010000&oth=&cd=&isplay=1&MTV_SRC=11060001&sd=";//$report_urls = "https://z.m.tv.sohu.com/h5_cc.gif?t=1517025729747&uid=1704291352423486&position=play_verify1&op=click&details=%7B%7D&nid=&url=https%253A%252F%252Fm.tv.sohu.com%252F20161027%252Fn471587159.shtml&refer=http%253A%252F%252Ftv.sohu.com%252F20161027%252Fn471587159.shtml&screen=1326x550&os=android&platform=android&passport=957099461778374656%40sohu.com&vid=3349737&pid=9174927&channeled=1211010000&MTV_SRC=11060001";//$report_urls = "https://z.m.tv.sohu.com/h5_cc.gif?t=1517025798548&uid=1704291352423486&position=play_videopause&op=click&details=%7B%7D&nid=&url=https%253A%252F%252Fm.tv.sohu.com%252F20161027%252Fn471587159.shtml&refer=http%253A%252F%252Ftv.sohu.com%252F20161027%252Fn471587159.shtml&screen=1326x550&os=android&platform=android&passport=957099461778374656%40sohu.com&vid=3349737&pid=9174927&channeled=1211010000&MTV_SRC=11060001";}public static function curl($url,$ids){//$data = mb_check_encoding($data,'gbk')?iconv('gbk','utf-8//IGNORE',$data):$data;//将字符串的编码从gbk转到UTF-8$params["ua"] = !empty($ids['ua']) ? $ids['ua'] : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36";$params["cookie"] = isset($ids['cookie']) ? $ids['cookie'] : COOKIE_SOHU ;if (isset($ids['httpheader'])) {$params["httpheader"] = $ids['httpheader'];}if (isset($ids['ip'])) {$params['ip'] = $ids['ip'];}return GlobalBase::curl($url,$params);}}?>

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看下载!

如何免费获取密码?

点击下载

小鱼网是一个美好的开源学习社区,学习编程,学习WordPress,下载WordPress插件主题,
小鱼网 » 搜狐视频解析源码

常见问题FAQ

发表回复

分享最优质的学习资料

立即查看 了解详情