资源分享

华数TV解析源码

华数TV解析源码

  1. <?php   
  2.  echo str_replace("\/","/",json_encode(Wasu::parse($url)));  
  3. /** 
  4.  
  5. */  
  6. class Wasu   
  7. {  
  8.   
  9.     public static function parse($url)  
  10.     {  
  11.         /*if(GlobalBase::is_ipad()){ 
  12.             if(strstr($url,"www.wasu.cn/Play/")==true){ 
  13.                 $url = str_replace("Play","wap/Play",$url); 
  14.             } 
  15.             $content = self::curl($url); 
  16.             preg_match("#'vid'\s*:\s*'(\d+)',#",$content,$playId); 
  17.             preg_match("#'key'\s*:\s*'(.*)',#",$content,$playKey); 
  18.             preg_match("#'url'\s*:\s*'(.*)',#",$content,$playUrl); 
  19.             $ids['vid'] = $playId[1]; 
  20.             $ids['key'] = $playKey[1]; 
  21.             $ids['vurl'] = $playUrl[1]; 
  22.             $ids['url'] = $url; 
  23.  
  24.             $data = self::get_wap_videos($ids); 
  25.         }else{ */  
  26.             if(strstr($url,"www.wasu.cn/wap/")==true){  
  27.                 $url = str_replace("/wap","",$url);  
  28.             }  
  29.             $content = self::curl($url);  
  30.             preg_match("#var\s*_playId\s*=\s*'(\d+)',#",$content,$playId);  
  31.             preg_match("#_playKey\s*=\s*'(.*)',#",$content,$playKey);  
  32.             preg_match("#_playUrl\s*=\s*'(.*)',#",$content,$playUrl);  
  33.             preg_match("#_playUrlHls\s*=\s*'(.*)',#",$content,$playUrlHls);  
  34.             preg_match("#_playpic\s*=\s*'(.*)',#",$content,$posters);  
  35.   
  36.             preg_match("#_sid_=(.*),_cid#",$content,$playId2);  
  37.   
  38.             $ids['vid'] = isset($playId[1]) ? $playId[1] : $playId2[1];  
  39.             $ids['poster'] = isset($posters[1]) ? $posters[1] : '' ;  
  40.             $ids['key'] = $playKey[1];  
  41.             $ids['url'] = $url;  
  42.             $ids['vurl'] = $playUrl[1];  
  43.             $ids['hurl'] = $playUrlHls[1];  
  44.             //print_r($ids);exit;  
  45.             $data = self::get_videos($ids);  
  46.         /*} */  
  47.         return $data;  
  48.     }  
  49.     public static function get_videos($ids)  
  50.     {  
  51.         $api = "https://www.wasu.cn/Api/getPlayInfoById/id/{$ids['vid']}/datatype/xml";  
  52.         $ids['ref'] = 'https://www.wasu.cn/Play/show/id/'.$ids['vid'];  
  53.         $ids['ua'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36';  
  54.         $data = self::curl($api,$ids);  
  55.         $txt = $data;  
  56.         $pa = '%<title><!\[CDATA\[(.*)\]\]></title>%si';//正则表达式  
  57.         preg_match_all($pa,$txt,$matches);  
  58.         $xml = simplexml_load_string($data);  
  59.         $json = json_decode(json_encode($xml),true);  
  60.         $mp4 = $json["mp4"];  
  61.         foreach ($mp4 as $_key => $value) {  
  62.             switch ($_key) {  
  63.                 case 'hd0':$def = "标清";break;  
  64.                 case 'hd1':$def = "高清";break;  
  65.                 case 'hd2':$def = "超清";break;  
  66.                 case 'hd3':$def = "720P";break;  
  67.                 case 'hd4':$def = "1080P";break;  
  68.             }  
  69.             $value = base64_encode(base64_decode($value));  
  70.             //$value = base64_encode(str_replace('.mp4','/playlist.m3u8',base64_decode($value)));  
  71.             $vurl = self::streamCode(self::get_code($ids['vid'],$ids['key'],$value));  
  72.   
  73.             if (GlobalBase::is_ipad()) {  
  74.                 if ($_key == 'hd2' && $vurl != '') {  
  75.                     $fdata[2]['url'] = $vurl;  
  76.                     $fdata[2]['def'] = '高清';  
  77.                 }   
  78.                 if ($_key == 'hd1' && $vurl != '') {  
  79.                     $fdata[3]['url'] = $vurl;  
  80.                     $fdata[3]['def'] = '流畅';  
  81.                 }  
  82.                 if ($_key == 'hd0' && $vurl != '') {  
  83.                     $fdata[4]['url'] = $vurl;  
  84.                     $fdata[4]['def'] = '流畅';  
  85.                 }  
  86.             } else {  
  87.                 if ($_key == 'hd4' && $vurl != '') {  
  88.                     $fdata[0]['url'] = $vurl;  
  89.                     $fdata[0]['def'] = '蓝光';  
  90.                 }   
  91.                 if ($_key == 'hd3' && $vurl != '') {  
  92.                     $fdata[1]['url'] = $vurl;  
  93.                     $fdata[1]['def'] = '720P';  
  94.                 }  
  95.                 if ($_key == 'hd2' && $vurl != '') {  
  96.                     $fdata[2]['url'] = $vurl;  
  97.                     $fdata[2]['def'] = '高清';  
  98.                 }   
  99.                 if ($_key == 'hd1' && $vurl != '') {  
  100.                     $fdata[3]['url'] = $vurl;  
  101.                     $fdata[3]['def'] = '流畅';  
  102.                 }  
  103.                 if ($_key == 'hd0' && $vurl != '') {  
  104.                     $fdata[4]['url'] = $vurl;  
  105.                     $fdata[4]['def'] = '流畅';  
  106.                 }  
  107.             }  
  108.         }  
  109.         for ($i=0; $i <= 5 ; $i++) {   
  110.             if ($fdata[$i] == '') {continue;}  
  111.             $key_arrays[]=$fdata[$i];  
  112.         }  
  113.         $videoinfo['code'] = 200;  
  114.         $videoinfo['poster'] = $json['snapshot'];  
  115.         $videoinfo['name'] = isset($matches[1][0]) ? $matches[1][0] : '';  
  116.         $videoinfo['play'] = 'h5mp4';  
  117.         $videoinfo['data']['url'] = $key_arrays[0]['url'];  
  118.         return $videoinfo;  
  119.     }  
  120.     public static function get_wap_videos($ids)  
  121.     {  
  122.         $api = "http://clientapi.wasu.cn/Phone/vodinfo/id/{$ids['vid']}";  
  123.         $data = self::curl($api,$ids);  
  124.         $json = json_decode($data,true);  
  125.         $vods = $json["vods"];  
  126.         $host = parse_url(base64_decode($ids['vurl']))["host"];  
  127.         foreach ($vods as $key => $value) {  
  128.             $def = $value["hd"];  
  129.             $vurl = $value["url"];  
  130.             $vurl = str_replace(parse_url($vurl)["host"],$host,$vurl);  
  131.             $vurl = str_replace('.mp4','/playlist.m3u8',$vurl);  
  132.             $vurl = self::streamCode(self::get_code($ids['vid'],$ids['key'],base64_encode($vurl)));  
  133.             $video[0] = $vurl;  
  134.             $video[1] = "video/m3u8";  
  135.             $video[2] = $def;  
  136.             $video[3] =  $def =="1080P"? 10 : $def =="高清"?10:0;  
  137.             $videoinfo["video"][$key] = $video;  
  138.         }  
  139.         return $videoinfo;  
  140.     }  
  141.     public static function get_code($vid,$key,$url)  
  142.     {  
  143.         $api = "https://apiontime.wasu.cn/Auth/getVideoUrl?id={$vid}&mode=1&key={$key}&url={$url}";  
  144.         $data = self::curl($api);  
  145.         preg_match("#\[CDATA\[(.*)\]\]#",$data,$video);  
  146.         return $video[1];  
  147.     }  
  148.     public static function curl($url,$ids='')  
  149.     {  
  150.         $params["ua"] = isset($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";  
  151.         return GlobalBase::curl($url,$params);  
  152.     }  
  153.   
  154.     //=======================================================================================================================================  
  155.     public static function streamCode($string$operation = 'DECODE', $key = 'wasu!@#48217#$@#1', $expiry = 0){  
  156.         $ckey_length = 4;  
  157.         $key = md5($key ? $key : '12345678');  
  158.         $keya = md5(substr($key, 0, 16));  
  159.         $keyb = md5(substr($key, 16, 32));  
  160.         $keyc = $ckey_length ? $operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length) : '';  
  161.         $cryptkey = $keya . md5($keya . $keyc);  
  162.         $key_length = strlen($cryptkey);  
  163.         $string = $operation == 'DECODE' ? base64_decode(substr($string$ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;  
  164.         $string_length = strlen($string);  
  165.         $result = '';  
  166.         $box = range(0, 255);  
  167.         $rndkey = array();  
  168.         for($i = 0; $i <= 255; $i++){  
  169.             $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
  170.         }  
  171.         for($j = $i = 0; $i < 128; $i++){  
  172.             $j = ($j + $box[$i] + $rndkey[$i]) % 128;  
  173.             $tmp = $box[$i];  
  174.             $box[$i] = $box[$j];  
  175.             $box[$j] = $tmp;  
  176.         }  
  177.         for($a = $j = $i = 0; $i < $string_length$i++){  
  178.             $a = ($a + 1) % 128;  
  179.             $j = ($j + $box[$a]) % 128;  
  180.             $tmp = $box[$a];  
  181.             $box[$a] = $box[$j];  
  182.             $box[$j] = $tmp;  
  183.             $result .= chr(ord($string[$i]) ^ $box[($box[$a] + $box[$j]) % 128]);  
  184.         }  
  185.         if($operation == 'DECODE'){  
  186.             if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)){  
  187.                 return substr($result, 26);  
  188.             }else{  
  189.                 return '';  
  190.             }  
  191.         }else{  
  192.             return $keyc . base64_encode($result);  
  193.         }  
  194.     }  
  195.     public static function _streamCode($enstr$token = "wasu!@#48217#$@#1") {  
  196.         $klen = 4;  
  197.         if (strstr($enstr,".mp4")) {  
  198.             return $enstr;  
  199.         }  
  200.         $token = md5($token);  
  201.         $tm = $_SERVER['REQUEST_TIME'];  
  202.         $key1 = md5(substr($token, 0, 16));  
  203.         $key2 = md5(substr($token, 16, 32));  
  204.         $key3 = substr($enstr, 0, $klen);  
  205.         $key4 = $key1.md5($key1.$key3);  
  206.         $keylen = strlen($key4);  
  207.         $enstr = base64_decode(substr($enstr$klen));  
  208.         $l16 = 0;  
  209.         $l14 = array();  
  210.         $l15 = array();  
  211.         $local13 = strlen($enstr);  
  212.         while ($l16 < 128){  
  213.             $l14[$l16] = $l16;  
  214.             $l15[$l16] = ord(substr($key4$l16 % $keylen, 1)) & 0xff;  
  215.             $l16++;  
  216.         }  
  217.         $l16 = 0;  
  218.         $l17 = $l16;  
  219.         while ($l16 < 128) {  
  220.             $l17 = (($l17 + $l14[$l16]) + $l15[$l16]) % 128;  
  221.             $l19 = $l14[$l16];  
  222.             $l14[$l16] = $l14[$l17];  
  223.             $l14[$l17] = $l19;  
  224.             $l16++;  
  225.         }  
  226.         $l16 = 0;  
  227.         $l20 = array();  
  228.         $l17 = $l16;  
  229.         $l18 = $l17;  
  230.         while ($l16 < $local13) {  
  231.             $l18 = (($l18 + 1) % 128);  
  232.             $l17 = (($l17 + $l14[$l18]) % 128);  
  233.             $l19 = $l14[$l18];  
  234.             $l14[$l18] = $l14[$l17];  
  235.             $l14[$l17] = $l19;  
  236.             $l20[] = ((ord(substr($enstr$l16, 1)) & 0xFF) ^ $l14[(($l14[$l18] + $l14[$l17]) % 128)]);  
  237.             $l16++;  
  238.         }  
  239.         $toStr = "";  
  240.         for($i = 0; $i < count($l20); $i++){  
  241.             $toStr .= chr($l20[$i]);  
  242.         }  
  243.         return strlen($toStr) > 26 ? substr($toStr, 26) : "";  
  244.     }  
  245.   
  246.     public static function get_WasuVODUrl($url) {  
  247.         $play = parse_url($url);  
  248.         $tm = $_SERVER['REQUEST_TIME'];  
  249.         $timestamp = date("YmdHi"$tm);  
  250.         $token = sprintf("%s%s%s""ccVOD@)!#\$WASUPC"$timestamp$play['path']);  
  251.         return sprintf("http://clientvod.wasu.cn/%s/%s%s"$timestamp, md5($token), $play['path']);  
  252.     }  
  253. }  
  254.   
  255.  /* 
  256.  
  257. function streamCode($enstr, $token = "wasu!@#48217#$@#1") { 
  258.     $klen = 4; 
  259.     if (strstr($enstr,".mp4")) { 
  260.         return $enstr; 
  261.     } 
  262.     $token = md5($token); 
  263.     $tm = $_SERVER['REQUEST_TIME']; 
  264.     $key1 = md5(substr($token, 0, 16)); 
  265.     $key2 = md5(substr($token, 16, 32)); 
  266.     $key3 = substr($enstr, 0, $klen); 
  267.     $key4 = $key1.md5($key1.$key3); 
  268.     $keylen = strlen($key4); 
  269.     $enstr = base64_decode(substr($enstr, $klen)); 
  270.     $l16 = 0; 
  271.     $l14 = array(); 
  272.     $l15 = array(); 
  273.     $local13 = strlen($enstr); 
  274.     while ($l16 < 128){ 
  275.         $l14[$l16] = $l16; 
  276.         $l15[$l16] = ord(substr($key4, $l16 % $keylen, 1)) & 0xff; 
  277.         $l16++; 
  278.     } 
  279.     $l16 = 0; 
  280.     $l17 = $l16; 
  281.     while ($l16 < 128) { 
  282.         $l17 = (($l17 + $l14[$l16]) + $l15[$l16]) % 128; 
  283.         $l19 = $l14[$l16]; 
  284.         $l14[$l16] = $l14[$l17]; 
  285.         $l14[$l17] = $l19; 
  286.         $l16++; 
  287.     } 
  288.     $l16 = 0; 
  289.     $l20 = array(); 
  290.     $l17 = $l16; 
  291.     $l18 = $l17; 
  292.     while ($l16 < $local13) { 
  293.         $l18 = (($l18 + 1) % 128); 
  294.         $l17 = (($l17 + $l14[$l18]) % 128); 
  295.         $l19 = $l14[$l18]; 
  296.         $l14[$l18] = $l14[$l17]; 
  297.         $l14[$l17] = $l19; 
  298.         $l20[] = ((ord(substr($enstr, $l16, 1)) & 0xFF) ^ $l14[(($l14[$l18] + $l14[$l17]) % 128)]); 
  299.         $l16++; 
  300.     } 
  301.     $toStr = ""; 
  302.     for($i = 0; $i < count($l20); $i++){ 
  303.         $toStr .= chr($l20[$i]); 
  304.     } 
  305.     return strlen($toStr) > 26 ? substr($toStr, 26) : ""; 
  306. } 
  307.  
  308. function get_WasuVODUrl($url) { 
  309.     $play = parse_url($url); 
  310.     $tm = $_SERVER['REQUEST_TIME']; 
  311.     $timestamp = date("YmdHi", $tm); 
  312.     $token = sprintf("%s%s%s", "ccVOD@)!#\$WASUPC", $timestamp, $play['path']); 
  313.     return sprintf("http://clientvod.wasu.cn/%s/%s%s", $timestamp, md5($token), $play['path']); 
  314. } 
  315.  
  316. $url = ""; 
  317. $link = isset($_REQUEST['url']) ? $_REQUEST['url'] : ""; 
  318. $enstr = empty($_REQUEST['enstr']) ? "" : $_REQUEST['enstr']; 
  319. if (strlen($enstr) > 32) { 
  320.     $url = streamCode($enstr); 
  321. } else if (strlen($link) > 15) { 
  322.     $url = @get_WasuVODUrl(base64_decode($link)); 
  323. } 
  324. echo '{"url":"'.$url.'"}'; 
  325.  
  326.   */  
(0)

本文由 柴郡猫-cheshirex,搬瓦工VPS,bandwagonhost 作者:cheshirex 发表,转载请注明来源!

关键词:

热评文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注