正文

PPTV解析源码

PPTV解析源码

  1. <?php  
  2. require_once(“../include/global.inc.php");  
  3. $host = GlobalBase::is_https().$_SERVER[“HTTP_HOST"];  
  4. if(isset($_REQUEST['url’])){  
  5.     $url = $_REQUEST['url’];  
  6.     $content = preg_replace(“#(getPlayEncode\(|\);)#",“",file_get_contents($url));  
  7.     $root = json_decode($content,true)[“childNodes"];  
  8.     //print_r($content);exit;  
  9.     $token = PPTVToKey::token();  
  10.     $videos = array();  
  11.     foreach ($root as $key => $value) {  
  12.         $tagName = $value[“tagName"];// “dt"  
  13.         if($tagName==“channel"){  
  14.             foreach ($value[“childNodes"as $_key => $_value) {  
  15.                 if($_value[“tagName"]==“file"){  
  16.                     foreach ($_value[“childNodes"as $__key => $__value) {  
  17.                         $rid = $__value[“rid"];//视频文件名  
  18.                         $ft = $__value[“ft"];//视频类型  
  19.                         switch ($ft) {  
  20.                             case 0:$def = “流畅"break;//480X270  
  21.                             case 1:$def = “高清"break;//720X404  
  22.                             case 2:$def = “超清"break;//1280X720  
  23.                             case 3:$def = “蓝光"break;//1920X1080  
  24.                             case 4:$def = “原画"break;//1920X1080  
  25.                         }  
  26.                         $videos[$ft][“rid"] = str_replace(“.mp4",“",$rid);  
  27.                         $videos[$ft][“def"] = $def;  
  28.                     }  
  29.                 }  
  30.             }  
  31.         }else if($tagName==“dt"){  
  32.             $ft = $value[“ft"];  
  33.             foreach ($value[“childNodes"as $_key => $_value) {  
  34.                 $_tagName = $_value[“tagName"];  
  35.                 switch ($_tagName) {  
  36.                     case 'sh’:$sh = $_value[“childNodes"][0];break;  
  37.                     case 'key’:$key = $_value[“childNodes"][0];break;  
  38.                 }  
  39.             }  
  40.             $videos[$ft][“sh"] = $sh;  
  41.             $videos[$ft][“key"] = $key;  
  42.         }  
  43.     }  
  44.     //if(count($videos)==5){//移除原画质  
  45.     //  array_splice($videos,4,1);   
  46.     //}  
  47.     array_splice($videos,0,1); //移除流畅  
  48.     foreach ($videos as $key => $value) {  
  49.         $xml = curl(“http://drag.synacast.com/".$value[“rid"].“.mp40drag");  
  50.         preg_match_all('#duration=“(.*?)"#’,$xml,$duration);  
  51.         preg_match_all('#filesize=“(\d+)"#’,$xml,$filesize);  
  52.         $videos[$key][“dragdata"][“dur"] = $duration[1];//分段时间  
  53.         $videos[$key][“dragdata"][“fs"] = $filesize[1];//分段文件大小  
  54.   
  55.     }  
  56.     $data[“data"] = $videos;  
  57.     $data[“token"] = $token;  
  58.     echo json_encode($data);  
  59. }  
  60. if(isset($_REQUEST['data’])&&isset($_REQUEST['vid’])){  
  61.     $data = json_encode(json_decode(base64_decode($_REQUEST['data’])));  
  62.     //print_r($_REQUEST['data’]);exit;  
  63.     file_put_contents(PPTV_TEMP_PATH.$_REQUEST['vid’].“.json",$data);  
  64.     echo “./video/pptv.php?vid=".$_REQUEST['vid’];  
  65. }elseif(isset($_REQUEST['vid’])){  
  66.     $file = PPTV_TEMP_PATH.$_REQUEST['vid’].“.json";  
  67.     //print_r($file.’ddddddddddddddddddd’);exit;  
  68.     $data = file_get_contents($file);  
  69.     unlink($file);  
  70.     echo $data;  
  71. }  
  72. function curl($url)  
  73. {  
  74.     $params[“ua"] = “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36";  
  75.     return GlobalBase::curl($url,$params);  
  76. }  
  77. class PPTVToKey   
  78. {  
  79.     public static function string($abyte2) {  
  80.         $k = “";  
  81.         for ($i=0; $i < count($abyte2); $i++) $k .= chr($abyte2[$i]);  
  82.         return trim($k);  
  83.     }  
  84.     public static function timeArray() {  
  85.         $i = 0;  
  86.         $abyte = array();  
  87.         $time = $_SERVER['REQUEST_TIME’] + 300;  
  88.         while ($i < 16) {  
  89.             $bytes;  
  90.             $abyte[$i] = 0xf & $time >> 28 – 4 * ($i % 8);  
  91.             $byte = $abyte[$i];  
  92.             if ($abyte[$i] > 9) $bytes = 87; else $bytes = 48;  
  93.             $abyte[$i] = $byte + $bytes;  
  94.             if ($i > 7 || $abyte[$i] == 0) {  
  95.                 $abyte[$i] = mt_rand(1, 256);  
  96.             }  
  97.             $i++;  
  98.         }  
  99.         return $abyte;  
  100.     }  
  101.     public static function token() {  
  102.         $keyArray = array();  
  103.         $tmAray = self::timeArray();  
  104.         $tmCode = array(113, 113, 113, 113, 113, 119, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0);  
  105.         $tmAray = self::encrypt_a($tmAray, 16, $tmCode);  
  106.         $keyArray = self::encrypt_b($tmAray, 16, $keyArray, 33);  
  107.         return self::string($keyArray);  
  108.     }  
  109.     public static function keyCode($tmCode) {  
  110.         $k = 0;  
  111.         for ($i=0; $i < 16; $i++) {  
  112.             $k ^= $tmCode[$i] << 8 * ($i % 4);  
  113.         }  
  114.         return $k;  
  115.     }  
  116.     public static function b($num) {  
  117.         $a = 0xffffffff & $num;  
  118.         $b = sprintf(“%u"$a);  
  119.         return $b * 1;  
  120.     }  
  121.     public static function encrypt_a($tmArray$i$tmCode) {  
  122.         $l = self::keyCode($tmCode);  
  123.         $l1 = $l << 8 | $l >> 24;  
  124.         $l2 = $l << 16 | $l >> 16;  
  125.         $l3 = $l << 24 | $l >> 8;  
  126.         for ($k = 0; $k + 16 <= $i$k += 16) {  
  127.             $l4 = 0;  
  128.             $l5 = 0;  
  129.             $l6 = 0;  
  130.             for ($i1 = 0; $i1 < 4; $i1++) {  
  131.                 $l4 |= (0xff & $tmArray[$k + $i1]) << $i1 * 8;  
  132.                 $l5 |= (0xff & $tmArray[4 + ($k + $i1)]) << $i1 * 8;  
  133.             }  
  134.             for ($j1 = 0; $j1 < 32; $j1++) {  
  135.                 $l6 = self::b($l6 – 0x61c88647);  
  136.                 $a1 = self::b($l5 << 4);  
  137.                 $a2 = self::b($l + $a1);  
  138.                 $a3 = self::b($l5 + $l6);  
  139.                 $a4 = self::b($a2 ^ $a3);  
  140.                 $a5 = self::b($l5 >> 5);  
  141.                 $a6 = self::b($l1 + $a5);  
  142.                 $l4 = self::b($l4 + ($a4 ^ $a6));  
  143.                 $b1 = self::b($l4 << 4);  
  144.                 $b2 = self::b($l2 + $b1);  
  145.                 $b3 = self::b($l4 + $l6);  
  146.                 $b4 = self::b($b2 ^ $b3);  
  147.                 $b5 = self::b($l4 >> 5);  
  148.                 $b6 = self::b($l3 + $b5);  
  149.                 $l5 = self::b($l5 + ($b4 ^ $b6));  
  150.             }  
  151.             for ($k1 = 0; $k1 < 4; $k1++) {  
  152.                 $tmArray[$k + $k1] = (255 & $l4 >> $k1 * 8);  
  153.                 $tmArray[4 + ($k + $k1)] = (255 & $l5 >> $k1 * 8);  
  154.             }  
  155.         }  
  156.         return $tmArray;  
  157.     }  
  158.     public static function encrypt_b($tmAray$i$keyArray$j) {  
  159.         for ($k = 0; $k < $i$k++) {  
  160.             $keyArray[$k * 2] = (0xf & $tmAray[$k]);  
  161.             $keyArray[1 + $k * 2] = (0xf & $tmAray[$k] >> 4);  
  162.         }  
  163.         $l = 0;  
  164.         while ($l < $i * 2) {  
  165.             $byte1;  
  166.             $byte0 = $keyArray[$l];  
  167.             if ($keyArray[$l] > 9) {  
  168.                 $byte1 = 87;  
  169.             } else {  
  170.                 $byte1 = 48;  
  171.             }  
  172.             $keyArray[$l] = $byte0 + $byte1;  
  173.             $l++;  
  174.         }  
  175.         $keyArray[$i * 2] = 0;  
  176.         return $keyArray;  
  177.     }  
  178. }  
  179.  ?>