admin

PPTV解析源码(参考)
<?php require_once("../include/global.inc.php"); $host...
扫描右侧二维码阅读全文
13
2018/12

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;
    }
}
 ?>
Last modification:December 13th, 2018 at 12:19 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment