20
2017
09

qq视频真实地址获取 _qv_rmt 和 _qv_rmt2算法PHP版本。

<?php
function u1($a, $b) {
	$c = array();
	$len = strlen($a);
	for ($d=$b;$d < $len;$d+=2) {
		$c[] = $a[$d];
	}
	return join('', $c);
}
function tempcalc($a, $b) {
	$c = array();
	for ($d = 0; $d < strlen($a); $d++) {
		$c[] = chr(ord($a[$d]) ^ ord($b[$d % 4]));
	}
	return join('', $c);
}
function urlenc($a, $b, $d) {
	$l = array();
	$len = strlen($a);
	$o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	for ($m=0;$m < $len;) {
		$arr = array($len > $m ? ord($a[$m++]) : 0, $len > $m ? ord($a[$m++]) : 0, $len > $m ? ord($a[$m++]) : 0);
    if (15 == $m) {
    	$l[]= "A";
    	$l[]= $b;
    	$l[]= $d;
    }
    $h = $arr[0] >> 2;
    $i = (3 & $arr[0]) << 4 | $arr[1] >> 4;
    $j = (15 & $arr[1]) << 2 | $arr[2] >> 6;
    $k = ($len - 1) & $arr[2];
    if (empty($arr[1])) $j = $k = $len;
    else if (empty($arr[2])) $k = $len;
    $l[] = $o[$h].$o[$i].$o[$j].$o[$k];
  }
  return join('', $l);
}

function curl($url) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}

function getCtk($vid, $platform = 10201, $sdtfrom = "v1010") {
	$token = "#\$#@#*ad";
	$tm = $_SERVER['REQUEST_TIME'];
	$key = md5($platform.$vid.$tm.$token."1".$sdtfrom);
	$da = tempcalc(pack("H*", $key), $token);
	$ab = urlenc($da, 1, $tm);
	return array("t1" => u1($ab, 0), "t2" => u1($ab, 1));
}
$vid = isset($_GET['vid']) ? trim($_GET['vid']) : "j00248gca2x";
$ck = getCtk($vid);
$body = curl("http://vv.video.qq.com/getinfo?charge=0&vid=".$vid."&defaultfmt=auto&otype=json&platform=10201&defnpayver=1&appVer=3.2.162&sdtfrom=v1010&host=v.qq.com&ehost=&sphttps=1&_rnd=&spwm=2&defn=shd&fhdswitch=0&show1080p=1&isHLS=1&dtype=3&sphls=1&newplatform=10201&defsrc=1&_qv_rmt=".$ck['t1']."&_qv_rmt2=".$ck['t2']);
$obj = json_decode(substr(trim($body), 13, -1));
print_r($obj);
exit();


« 上一篇 下一篇 »