mirror of
https://github.com/hjdhnx/dr_py.git
synced 2024-11-24 09:48:24 -06:00
144 lines
5.3 KiB
PHP
144 lines
5.3 KiB
PHP
<?php
|
||
error_reporting(0);
|
||
if (!file_exists('Cache/qq')) {mkdir('Cache/qq', 0777, true);}
|
||
$url = $_GET["url"];
|
||
echo json_encode(VQQ::parse($url));
|
||
class VQQ
|
||
{
|
||
public static function parse($url) {
|
||
$content = file_get_contents($url);
|
||
|
||
preg_match('#"drm":(0|1|2),#iU',$content,$isdrm);
|
||
preg_match('#<title>(.*?)<\/title>#iU',$content,$name);
|
||
$drm = $isdrm[1];
|
||
|
||
preg_match('#cid=(\w+)&vid=(\w+)["|&]#',$content,$id);
|
||
$cid = empty($id[1])? 0 :$id[1];
|
||
$vid = $id[2];
|
||
if (!$vid) {
|
||
preg_match('#&vid=(\w+)["|&]#',$content,$id);
|
||
$vid = $id[1];
|
||
$cid = '';
|
||
}
|
||
|
||
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
|
||
if (!file_exists($ep_file)||filemtime($ep_file)+10800 < time()){
|
||
if ($drm != 0) { //是否付费
|
||
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
|
||
return self::h5($vid,$cookie);
|
||
} else{
|
||
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
|
||
return self::h5($vid,$cookie);
|
||
}
|
||
}else{
|
||
$vurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
|
||
$videoinfo['code'] = 200;
|
||
$videoinfo['success'] = 1;
|
||
$videoinfo['url'] = $vurl;
|
||
$videoinfo['type'] = 'hls';
|
||
$videoinfo['player'] = "dplayer";
|
||
$videoinfo['cache'] = "1";
|
||
}
|
||
|
||
return $videoinfo;
|
||
}
|
||
public static function h5($vid,$cookie){
|
||
$api = 'https://h5vv6.video.qq.com/getinfo?encver=2&defn=fhd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&dtype=3&vid='.$vid.'&newnettype=4';
|
||
|
||
$body = self::gh5($api,$cookie);
|
||
|
||
|
||
$data = json_decode($body,true);
|
||
|
||
$vi = $data["vl"]["vi"][0];
|
||
$ui = $vi["ul"]["ui"];
|
||
|
||
$url = $ui[3]["url"];
|
||
|
||
$hls = $ui[3]['hls']['pt'];
|
||
$vurl = $url.$hls;
|
||
if($vurl ==''||$vurl ==null){ return ['code' => '404','url' => 'null']; }
|
||
$data = file_get_contents($vurl);
|
||
$lines = preg_split('/[\r\n]+/s', $data);//按行进行分割字符串
|
||
$durations = array();
|
||
$urls = array();
|
||
$bool = true;
|
||
$targetduration = "";
|
||
foreach ($lines as $value) {
|
||
if(!empty(strstr($value,"#EXT-X-TARGETDURATION:"))){//多码率
|
||
$targetduration = $value;
|
||
}else if(!empty(strstr($value,"#EXTINF:"))){//单码率
|
||
$durations[count($durations)] = $value;
|
||
$bool = true;
|
||
}else if(!empty($value)&&substr($value,0,1)!="#"){
|
||
if($bool){
|
||
$urls[count($urls)] = $value;
|
||
}
|
||
}
|
||
}
|
||
|
||
$url = preg_replace('/(http:\/\/(.*?)\/(.*?)\/(.*?)\/)/i','https://omts.tc.qq.com/',$url);
|
||
$m3u8 = "#EXTM3U\n#EXT-X-VERSION:3\n";
|
||
$m3u8 .= empty($targetduration)?"#EXT-X-TARGETDURATION:7200\n" : $targetduration."\n";
|
||
foreach ($durations as $key => $value) {
|
||
$m3u8 .= $value."\n".$url.$urls[$key]."\n";
|
||
}
|
||
$m3u8 = str_replace('&ver=4','',$m3u8);
|
||
$m3u8 .="#EXT-X-ENDLIST";
|
||
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
|
||
file_put_contents($ep_file, $m3u8);
|
||
$vvurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
|
||
$videoinfo['success'] = 1;
|
||
$videoinfo['code'] = 200;
|
||
$videoinfo['url'] = $vvurl;
|
||
$videoinfo['type'] = 'hls';
|
||
$videoinfo['player'] = "dplayer";
|
||
|
||
return $videoinfo;
|
||
}
|
||
|
||
public static function gh5($url,$cookie){
|
||
$header = array(
|
||
'Host: h5vv6.video.qq.com',
|
||
'Accept: */*',
|
||
'Content-Type: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
|
||
'Connection: keep-alive',
|
||
'Cookie: '.$cookie,
|
||
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
|
||
'Referer: https://servicewechat.com/wxa75efa648b60994b/69/page-frame.html',
|
||
'Accept-Language: zh-CN,zh;q=0.9',
|
||
);
|
||
$curl = curl_init();
|
||
//初始化 curl
|
||
curl_setopt($curl, CURLOPT_URL, $url);
|
||
//要访问网页 URL 地址
|
||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设定是否输出页面内容
|
||
curl_setopt($curl, CURLOPT_REFERER,$url) ;
|
||
//伪装网页来源 URL
|
||
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
|
||
//当Location:重定向时,自动设置header中的Referer:信息
|
||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
|
||
//数据传输的最大允许时间
|
||
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||
//不返回 header 部分
|
||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||
//返回字符串,而非直接输出到屏幕上
|
||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
|
||
//跟踪爬取重定向页面
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0');
|
||
//不检查 SSL 证书来源
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0');
|
||
//不检查 证书中 SSL 加密算法是否存在
|
||
curl_setopt($curl, CURLOPT_ENCODING, '');
|
||
//解决网页乱码问题
|
||
//curl_setopt($curl, CURLOPT_COOKIE, '');
|
||
//从字符串传参来提交cookies
|
||
$data = curl_exec($curl);
|
||
//运行 curl,请求网页并返回结果
|
||
curl_close($curl);
|
||
//关闭 curl
|
||
return $data;
|
||
}
|
||
}
|
||
?>
|