1、前端方法!
首先复制一个连接!
就你上传腾讯视频的url,注意不要拿那种电影啊之类的试! 那种获取不到的! 要拿别人上传的!或者自己上传的试!
取,最后一个/和.html中间内容!后面我又直接写好js
var url = 'https://v.qq.com/x/page/f0925rpowb2.html';
然后打开nginx,配置域名转发,不然会跨域
location ^~ /tengxun/ { proxy_pass http://vv.video.qq.com/; # 转发地址 }
把tengxun开头的转发到腾讯去
然后在直接get请求!
完整源码和注释
可选值有sd(标清)、hd(高清)、shd(超清)、fhd(1080P)
<!DOCTYPE html> <html> <head> <title>完整的demo</title> <meta charset="utf-8"> </head> <body> <script type="text/javascript" src="//apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> //你复制的地址 var url = 'https://v.qq.com/x/page/f0925rpowb2.html'; let vids = url.match(/\/([^/]*)$/)[1].replace('.html', ''); async function aa() { //这个函数主要为了同步 let s = '' // 或者可以直接打开同步,就不用async进行同步了了! // $.ajaxSettings.async = false; // http://vv.video.qq.com/getinfo?vids=f0925rpowb2&platform=101001&charge=0&otype=json 这个是真实的请求地址,直接请求会报错! await $.get("/tengxun/getinfo?vids=" + vids + "&platform=101001&charge=0&otype=json", function(result) { let str = result.replace('QZOutputJson=', '') let strs = str.replace(/[;?]$/, '') var obj = JSON.parse(strs); s = obj.vl.vi[0].ul.ui[0].url + obj.vl.vi[0].fn + '?vkey=' + obj.vl.vi[0].fvkey }) return s } aa().then(res => { console.log(res) url = res }); </script> </body> </html>
值得注意的是!腾讯的key会不断的变化,所以需要定期更新key,如果内容是输入数据库的! 那就没必要用上面那种了!
2、后端方法
一、ajax请求方法,传个腾讯url即可!
<?php $url=$_GET['url']; if(empty($url)){ $result =array('code'=>500); echo json_encode($result);//返回数据 exit(); } $link_array = explode('/',$url); $vid = explode('.',end($link_array))[0]; $urls = 'http://vv.video.qq.com/getinfo?vids='.$vid.'&platform=101001&charge=0&otype=json&defn=shd'; $json = file_get_contents($urls); preg_match('/^QZOutputJson=(.*?);$/',$json,$json2); $tempStr = json_decode($json2[1],true); $vurl = $tempStr['vl']['vi'][0]['ul']['ui'][0]['url'].$tempStr['vl']['vi'][0]['fn']."?vkey=".$tempStr['vl']['vi'][0]['fvkey']; $result =array('code'=>200,'result'=>$vurl); echo json_encode($result);//返回数据 exit(); ?>
二、全文匹配腾讯Url,然后进行查找腾讯url,进行替换为video
用php方法,先定义方法
if(!function_exists('replacevideo')){ function replacevideo($str){ preg_match_all('/((http|ftp|https):\/\/)(?=.*(qq\.com))([\w_-]+(?:(?:\.[\w_-]+)+))+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/',$str,$arr); if(!$arr[0]){ return $str; } $replaceOnce = function($needle,$replace,$haystack){ $pos = strpos($haystack, $needle);//查找出现的位置 if($pos===false){return $haystack;}//查不到就放弃 return substr_replace($haystack,$replace,$pos,strlen($needle)); // 查找替换和$needle长度的字符 }; $reolaceqq = function($url){ $link_array = explode('/',$url); $vid = explode('.',end($link_array))[0]; $urls = 'http://vv.video.qq.com/getinfo?vids='.$vid.'&platform=101001&charge=0&otype=json&defn=shd'; $json = file_get_contents($urls); preg_match('/^QZOutputJson=(.*?);$/',$json,$json2); $tempStr = json_decode($json2[1],true); $vurl = $tempStr['vl']['vi'][0]['ul']['ui'][0]['url'].$tempStr['vl']['vi'][0]['fn']."?vkey=".$tempStr['vl']['vi'][0]['fvkey']; if($vurl){ $video="<video controls src=".$vurl." width='100%'></video>"; return $video; }else{ return $url; } }; $_tmp = []; foreach($arr[0] as $v){ $tmp = explode($v,$str);//把$v前后分成2段 $_tmp[]=$tmp[0];//叠加起始段 $_tmp[]=$reolaceqq($v); // 匹配到的字符串段 $str = $replaceOnce($tmp[0].$v,'',$str); //把起始段和匹配到的字符发过去替换为空 } return join($_tmp,'').$str; } }
使用
$str = "你好.aa='https://v.qq.com/x/page/f0925rpowb2.html哈哈https://vs.qq.com/x/page/f0925rpowb22.html哒http://write.blog.csdn.net/post嗯嗯baidu.com aa"; $a=replacevideo($str); echo $a;