华数TV解析源码

<?php   
 echo str_replace("\/","/",json_encode(Wasu::parse($url)));  
class Wasu   
{  
  
    public static function parse($url)  
    {  
        /*if(GlobalBase::is_ipad()){ 
            if(strstr($url,"www.wasu.cn/Play/")==true){ 
                $url = str_replace("Play","wap/Play",$url); 
            } 
            $content = self::curl($url); 
            preg_match("#'vid'\s*:\s*'(\d+)',#",$content,$playId); 
            preg_match("#'key'\s*:\s*'(.*)',#",$content,$playKey); 
            preg_match("#'url'\s*:\s*'(.*)',#",$content,$playUrl); 
            $ids['vid'] = $playId[1]; 
            $ids['key'] = $playKey[1]; 
            $ids['vurl'] = $playUrl[1]; 
            $ids['url'] = $url; 
 
            $data = self::get_wap_videos($ids); 
        }else{ */  
            if(strstr($url,"www.wasu.cn/wap/")==true){  
                $url = str_replace("/wap","",$url);  
            }  
            $content = self::curl($url);  
            preg_match("#var\s*_playId\s*=\s*'(\d+)',#",$content,$playId);  
            preg_match("#_playKey\s*=\s*'(.*)',#",$content,$playKey);  
            preg_match("#_playUrl\s*=\s*'(.*)',#",$content,$playUrl);  
            preg_match("#_playUrlHls\s*=\s*'(.*)',#",$content,$playUrlHls);  
            preg_match("#_playpic\s*=\s*'(.*)',#",$content,$posters);  
  
            preg_match("#_sid_=(.*),_cid#",$content,$playId2);  
  
            $ids['vid'] = isset($playId[1]) ? $playId[1] : $playId2[1];  
            $ids['poster'] = isset($posters[1]) ? $posters[1] : '' ;  
            $ids['key'] = $playKey[1];  
            $ids['url'] = $url;  
            $ids['vurl'] = $playUrl[1];  
            $ids['hurl'] = $playUrlHls[1];  
            //print_r($ids);exit;  
            $data = self::get_videos($ids);  
        /*} */  
        return $data;  
    }  
    public static function get_videos($ids)  
    {  
        $api = "https://www.wasu.cn/Api/getPlayInfoById/id/{$ids['vid']}/datatype/xml";  
        $ids['ref'] = 'https://www.wasu.cn/Play/show/id/'.$ids['vid'];  
        $ids['ua'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36';  
        $data = self::curl($api,$ids);  
        $txt = $data;  
        $pa = '%<title><!\[CDATA\[(.*)\]\]></title>%si';//正则表达式  
        preg_match_all($pa,$txt,$matches);  
        $xml = simplexml_load_string($data);  
        $json = json_decode(json_encode($xml),true);  
        $mp4 = $json["mp4"];  
        foreach ($mp4 as $_key => $value) {  
            switch ($_key) {  
                case 'hd0':$def = "标清";break;  
                case 'hd1':$def = "高清";break;  
                case 'hd2':$def = "超清";break;  
                case 'hd3':$def = "720P";break;  
                case 'hd4':$def = "1080P";break;  
            }  
            $value = base64_encode(base64_decode($value));  
            //$value = base64_encode(str_replace('.mp4','/playlist.m3u8',base64_decode($value)));  
            $vurl = self::streamCode(self::get_code($ids['vid'],$ids['key'],$value));  
  
            if (GlobalBase::is_ipad()) {  
                if ($_key == 'hd2' && $vurl != '') {  
                    $fdata[2]['url'] = $vurl;  
                    $fdata[2]['def'] = '高清';  
                }   
                if ($_key == 'hd1' && $vurl != '') {  
                    $fdata[3]['url'] = $vurl;  
                    $fdata[3]['def'] = '流畅';  
                }  
                if ($_key == 'hd0' && $vurl != '') {  
                    $fdata[4]['url'] = $vurl;  
                    $fdata[4]['def'] = '流畅';  
                }  
            } else {  
                if ($_key == 'hd4' && $vurl != '') {  
                    $fdata[0]['url'] = $vurl;  
                    $fdata[0]['def'] = '蓝光';  
                }   
                if ($_key == 'hd3' && $vurl != '') {  
                    $fdata[1]['url'] = $vurl;  
                    $fdata[1]['def'] = '720P';  
                }  
                if ($_key == 'hd2' && $vurl != '') {  
                    $fdata[2]['url'] = $vurl;  
                    $fdata[2]['def'] = '高清';  
                }   
                if ($_key == 'hd1' && $vurl != '') {  
                    $fdata[3]['url'] = $vurl;  
                    $fdata[3]['def'] = '流畅';  
                }  
                if ($_key == 'hd0' && $vurl != '') {  
                    $fdata[4]['url'] = $vurl;  
                    $fdata[4]['def'] = '流畅';  
                }  
            }  
        }  
        for ($i=0; $i <= 5 ; $i++) {   
            if ($fdata[$i] == '') {continue;}  
            $key_arrays[]=$fdata[$i];  
        }  
        $videoinfo['code'] = 200;  
        $videoinfo['poster'] = $json['snapshot'];  
        $videoinfo['name'] = isset($matches[1][0]) ? $matches[1][0] : '';  
        $videoinfo['play'] = 'h5mp4';  
        $videoinfo['data']['url'] = $key_arrays[0]['url'];  
        return $videoinfo;  
    }  
    public static function get_wap_videos($ids)  
    {  
        $api = "http://clientapi.wasu.cn/Phone/vodinfo/id/{$ids['vid']}";  
        $data = self::curl($api,$ids);  
        $json = json_decode($data,true);  
        $vods = $json["vods"];  
        $host = parse_url(base64_decode($ids['vurl']))["host"];  
        foreach ($vods as $key => $value) {  
            $def = $value["hd"];  
            $vurl = $value["url"];  
            $vurl = str_replace(parse_url($vurl)["host"],$host,$vurl);  
            $vurl = str_replace('.mp4','/playlist.m3u8',$vurl);  
            $vurl = self::streamCode(self::get_code($ids['vid'],$ids['key'],base64_encode($vurl)));  
            $video[0] = $vurl;  
            $video[1] = "video/m3u8";  
            $video[2] = $def;  
            $video[3] =  $def =="1080P"? 10 : $def =="高清"?10:0;  
            $videoinfo["video"][$key] = $video;  
        }  
        return $videoinfo;  
    }  
    public static function get_code($vid,$key,$url)  
    {  
        $api = "https://apiontime.wasu.cn/Auth/getVideoUrl?id={$vid}&mode=1&key={$key}&url={$url}";  
        $data = self::curl($api);  
        preg_match("#\[CDATA\[(.*)\]\]#",$data,$video);  
        return $video[1];  
    }  
    public static function curl($url,$ids='')  
    {  
        $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";  
        return GlobalBase::curl($url,$params);  
    }  
  
    //=======================================================================================================================================  
    public static function streamCode($string, $operation = 'DECODE', $key = 'wasu!@#48217#$@#1', $expiry = 0){  
        $ckey_length = 4;  
        $key = md5($key ? $key : '12345678');  
        $keya = md5(substr($key, 0, 16));  
        $keyb = md5(substr($key, 16, 32));  
        $keyc = $ckey_length ? $operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length) : '';  
        $cryptkey = $keya . md5($keya . $keyc);  
        $key_length = strlen($cryptkey);  
        $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;  
        $string_length = strlen($string);  
        $result = '';  
        $box = range(0, 255);  
        $rndkey = array();  
        for($i = 0; $i <= 255; $i++){  
            $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
        }  
        for($j = $i = 0; $i < 128; $i++){  
            $j = ($j + $box[$i] + $rndkey[$i]) % 128;  
            $tmp = $box[$i];  
            $box[$i] = $box[$j];  
            $box[$j] = $tmp;  
        }  
        for($a = $j = $i = 0; $i < $string_length; $i++){  
            $a = ($a + 1) % 128;  
            $j = ($j + $box[$a]) % 128;  
            $tmp = $box[$a];  
            $box[$a] = $box[$j];  
            $box[$j] = $tmp;  
            $result .= chr(ord($string[$i]) ^ $box[($box[$a] + $box[$j]) % 128]);  
        }  
        if($operation == 'DECODE'){  
            if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)){  
                return substr($result, 26);  
            }else{  
                return '';  
            }  
        }else{  
            return $keyc . base64_encode($result);  
        }  
    }  
    public static function _streamCode($enstr, $token = "wasu!@#48217#$@#1") {  
        $klen = 4;  
        if (strstr($enstr,".mp4")) {  
            return $enstr;  
        }  
        $token = md5($token);  
        $tm = $_SERVER['REQUEST_TIME'];  
        $key1 = md5(substr($token, 0, 16));  
        $key2 = md5(substr($token, 16, 32));  
        $key3 = substr($enstr, 0, $klen);  
        $key4 = $key1.md5($key1.$key3);  
        $keylen = strlen($key4);  
        $enstr = base64_decode(substr($enstr, $klen));  
        $l16 = 0;  
        $l14 = array();  
        $l15 = array();  
        $local13 = strlen($enstr);  
        while ($l16 < 128){  
            $l14[$l16] = $l16;  
            $l15[$l16] = ord(substr($key4, $l16 % $keylen, 1)) & 0xff;  
            $l16++;  
        }  
        $l16 = 0;  
        $l17 = $l16;  
        while ($l16 < 128) {  
            $l17 = (($l17 + $l14[$l16]) + $l15[$l16]) % 128;  
            $l19 = $l14[$l16];  
            $l14[$l16] = $l14[$l17];  
            $l14[$l17] = $l19;  
            $l16++;  
        }  
        $l16 = 0;  
        $l20 = array();  
        $l17 = $l16;  
        $l18 = $l17;  
        while ($l16 < $local13) {  
            $l18 = (($l18 + 1) % 128);  
            $l17 = (($l17 + $l14[$l18]) % 128);  
            $l19 = $l14[$l18];  
            $l14[$l18] = $l14[$l17];  
            $l14[$l17] = $l19;  
            $l20[] = ((ord(substr($enstr, $l16, 1)) & 0xFF) ^ $l14[(($l14[$l18] + $l14[$l17]) % 128)]);  
            $l16++;  
        }  
        $toStr = "";  
        for($i = 0; $i < count($l20); $i++){  
            $toStr .= chr($l20[$i]);  
        }  
        return strlen($toStr) > 26 ? substr($toStr, 26) : "";  
    }  
  
    public static function get_WasuVODUrl($url) {  
        $play = parse_url($url);  
        $tm = $_SERVER['REQUEST_TIME'];  
        $timestamp = date("YmdHi", $tm);  
        $token = sprintf("%s%s%s", "ccVOD@)!#\$WASUPC", $timestamp, $play['path']);  
        return sprintf("http://clientvod.wasu.cn/%s/%s%s", $timestamp, md5($token), $play['path']);  
    }  
}  
  
 /* 
 
function streamCode($enstr, $token = "wasu!@#48217#$@#1") { 
    $klen = 4; 
    if (strstr($enstr,".mp4")) { 
        return $enstr; 
    } 
    $token = md5($token); 
    $tm = $_SERVER['REQUEST_TIME']; 
    $key1 = md5(substr($token, 0, 16)); 
    $key2 = md5(substr($token, 16, 32)); 
    $key3 = substr($enstr, 0, $klen); 
    $key4 = $key1.md5($key1.$key3); 
    $keylen = strlen($key4); 
    $enstr = base64_decode(substr($enstr, $klen)); 
    $l16 = 0; 
    $l14 = array(); 
    $l15 = array(); 
    $local13 = strlen($enstr); 
    while ($l16 < 128){ 
        $l14[$l16] = $l16; 
        $l15[$l16] = ord(substr($key4, $l16 % $keylen, 1)) & 0xff; 
        $l16++; 
    } 
    $l16 = 0; 
    $l17 = $l16; 
    while ($l16 < 128) { 
        $l17 = (($l17 + $l14[$l16]) + $l15[$l16]) % 128; 
        $l19 = $l14[$l16]; 
        $l14[$l16] = $l14[$l17]; 
        $l14[$l17] = $l19; 
        $l16++; 
    } 
    $l16 = 0; 
    $l20 = array(); 
    $l17 = $l16; 
    $l18 = $l17; 
    while ($l16 < $local13) { 
        $l18 = (($l18 + 1) % 128); 
        $l17 = (($l17 + $l14[$l18]) % 128); 
        $l19 = $l14[$l18]; 
        $l14[$l18] = $l14[$l17]; 
        $l14[$l17] = $l19; 
        $l20[] = ((ord(substr($enstr, $l16, 1)) & 0xFF) ^ $l14[(($l14[$l18] + $l14[$l17]) % 128)]); 
        $l16++; 
    } 
    $toStr = ""; 
    for($i = 0; $i < count($l20); $i++){ 
        $toStr .= chr($l20[$i]); 
    } 
    return strlen($toStr) > 26 ? substr($toStr, 26) : ""; 
} 
 
function get_WasuVODUrl($url) { 
    $play = parse_url($url); 
    $tm = $_SERVER['REQUEST_TIME']; 
    $timestamp = date("YmdHi", $tm); 
    $token = sprintf("%s%s%s", "ccVOD@)!#\$WASUPC", $timestamp, $play['path']); 
    return sprintf("http://clientvod.wasu.cn/%s/%s%s", $timestamp, md5($token), $play['path']); 
} 
 
$url = ""; 
$link = isset($_REQUEST['url']) ? $_REQUEST['url'] : ""; 
$enstr = empty($_REQUEST['enstr']) ? "" : $_REQUEST['enstr']; 
if (strlen($enstr) > 32) { 
    $url = streamCode($enstr); 
} else if (strlen($link) > 15) { 
    $url = @get_WasuVODUrl(base64_decode($link)); 
} 
echo '{"url":"'.$url.'"}'; 
 
  */  

给TA打赏
共{{data.count}}人
人已打赏
源码分享

搜狐视频解析源码

2018-12-25 22:47:41

源码分享

抖音短视频无水印解析接口源码

2019-1-24 23:58:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索