PPTV解析源码
- <?php
- require_once(“../include/global.inc.php”);
- $host = GlobalBase::is_https().$_SERVER[“HTTP_HOST”];
- if(isset($_REQUEST[‘url’])){
- $url = $_REQUEST[‘url’];
- $content = preg_replace(“#(getPlayEncode\(|\);)#”,””,file_get_contents($url));
- $root = json_decode($content,true)[“childNodes”];
- //print_r($content);exit;
- $token = PPTVToKey::token();
- $videos = array();
- foreach ($root as $key => $value) {
- $tagName = $value[“tagName”];// “dt”
- if($tagName==”channel”){
- foreach ($value[“childNodes”] as $_key => $_value) {
- if($_value[“tagName”]==”file”){
- foreach ($_value[“childNodes”] as $__key => $__value) {
- $rid = $__value[“rid”];//视频文件名
- $ft = $__value[“ft”];//视频类型
- switch ($ft) {
- case 0:$def = “流畅”; break;//480X270
- case 1:$def = “高清”; break;//720X404
- case 2:$def = “超清”; break;//1280X720
- case 3:$def = “蓝光”; break;//1920X1080
- case 4:$def = “原画”; break;//1920X1080
- }
- $videos[$ft][“rid”] = str_replace(“.mp4″,””,$rid);
- $videos[$ft][“def”] = $def;
- }
- }
- }
- }else if($tagName==”dt”){
- $ft = $value[“ft”];
- foreach ($value[“childNodes”] as $_key => $_value) {
- $_tagName = $_value[“tagName”];
- switch ($_tagName) {
- case ‘sh’:$sh = $_value[“childNodes”][0];break;
- case ‘key’:$key = $_value[“childNodes”][0];break;
- }
- }
- $videos[$ft][“sh”] = $sh;
- $videos[$ft][“key”] = $key;
- }
- }
- //if(count($videos)==5){//移除原画质
- // array_splice($videos,4,1);
- //}
- array_splice($videos,0,1); //移除流畅
- foreach ($videos as $key => $value) {
- $xml = curl(“http://drag.synacast.com/”.$value[“rid”].”.mp40drag”);
- preg_match_all(‘#duration=”(.*?)”#’,$xml,$duration);
- preg_match_all(‘#filesize=”(\d+)”#’,$xml,$filesize);
- $videos[$key][“dragdata”][“dur”] = $duration[1];//分段时间
- $videos[$key][“dragdata”][“fs”] = $filesize[1];//分段文件大小
- }
- $data[“data”] = $videos;
- $data[“token”] = $token;
- echo json_encode($data);
- }
- if(isset($_REQUEST[‘data’])&&isset($_REQUEST[‘vid’])){
- $data = json_encode(json_decode(base64_decode($_REQUEST[‘data’])));
- //print_r($_REQUEST[‘data’]);exit;
- file_put_contents(PPTV_TEMP_PATH.$_REQUEST[‘vid’].”.json”,$data);
- echo “./video/pptv.php?vid=”.$_REQUEST[‘vid’];
- }elseif(isset($_REQUEST[‘vid’])){
- $file = PPTV_TEMP_PATH.$_REQUEST[‘vid’].”.json”;
- //print_r($file.’ddddddddddddddddddd’);exit;
- $data = file_get_contents($file);
- unlink($file);
- echo $data;
- }
- function curl($url)
- {
- $params[“ua”] = “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36”;
- return GlobalBase::curl($url,$params);
- }
- class PPTVToKey
- {
- public static function string($abyte2) {
- $k = “”;
- for ($i=0; $i < count($abyte2); $i++) $k .= chr($abyte2[$i]);
- return trim($k);
- }
- public static function timeArray() {
- $i = 0;
- $abyte = array();
- $time = $_SERVER[‘REQUEST_TIME’] + 300;
- while ($i < 16) {
- $bytes;
- $abyte[$i] = 0xf & $time >> 28 – 4 * ($i % 8);
- $byte = $abyte[$i];
- if ($abyte[$i] > 9) $bytes = 87; else $bytes = 48;
- $abyte[$i] = $byte + $bytes;
- if ($i > 7 || $abyte[$i] == 0) {
- $abyte[$i] = mt_rand(1, 256);
- }
- $i++;
- }
- return $abyte;
- }
- public static function token() {
- $keyArray = array();
- $tmAray = self::timeArray();
- $tmCode = array(113, 113, 113, 113, 113, 119, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- $tmAray = self::encrypt_a($tmAray, 16, $tmCode);
- $keyArray = self::encrypt_b($tmAray, 16, $keyArray, 33);
- return self::string($keyArray);
- }
- public static function keyCode($tmCode) {
- $k = 0;
- for ($i=0; $i < 16; $i++) {
- $k ^= $tmCode[$i] << 8 * ($i % 4);
- }
- return $k;
- }
- public static function b($num) {
- $a = 0xffffffff & $num;
- $b = sprintf(“%u”, $a);
- return $b * 1;
- }
- public static function encrypt_a($tmArray, $i, $tmCode) {
- $l = self::keyCode($tmCode);
- $l1 = $l << 8 | $l >> 24;
- $l2 = $l << 16 | $l >> 16;
- $l3 = $l << 24 | $l >> 8;
- for ($k = 0; $k + 16 <= $i; $k += 16) {
- $l4 = 0;
- $l5 = 0;
- $l6 = 0;
- for ($i1 = 0; $i1 < 4; $i1++) {
- $l4 |= (0xff & $tmArray[$k + $i1]) << $i1 * 8;
- $l5 |= (0xff & $tmArray[4 + ($k + $i1)]) << $i1 * 8;
- }
- for ($j1 = 0; $j1 < 32; $j1++) {
- $l6 = self::b($l6 – 0x61c88647);
- $a1 = self::b($l5 << 4);
- $a2 = self::b($l + $a1);
- $a3 = self::b($l5 + $l6);
- $a4 = self::b($a2 ^ $a3);
- $a5 = self::b($l5 >> 5);
- $a6 = self::b($l1 + $a5);
- $l4 = self::b($l4 + ($a4 ^ $a6));
- $b1 = self::b($l4 << 4);
- $b2 = self::b($l2 + $b1);
- $b3 = self::b($l4 + $l6);
- $b4 = self::b($b2 ^ $b3);
- $b5 = self::b($l4 >> 5);
- $b6 = self::b($l3 + $b5);
- $l5 = self::b($l5 + ($b4 ^ $b6));
- }
- for ($k1 = 0; $k1 < 4; $k1++) {
- $tmArray[$k + $k1] = (255 & $l4 >> $k1 * 8);
- $tmArray[4 + ($k + $k1)] = (255 & $l5 >> $k1 * 8);
- }
- }
- return $tmArray;
- }
- public static function encrypt_b($tmAray, $i, $keyArray, $j) {
- for ($k = 0; $k < $i; $k++) {
- $keyArray[$k * 2] = (0xf & $tmAray[$k]);
- $keyArray[1 + $k * 2] = (0xf & $tmAray[$k] >> 4);
- }
- $l = 0;
- while ($l < $i * 2) {
- $byte1;
- $byte0 = $keyArray[$l];
- if ($keyArray[$l] > 9) {
- $byte1 = 87;
- } else {
- $byte1 = 48;
- }
- $keyArray[$l] = $byte0 + $byte1;
- $l++;
- }
- $keyArray[$i * 2] = 0;
- return $keyArray;
- }
- }
- ?>