Fork me on GitHub

python腾讯视频真实视频地址解析

首先,我们随便找一个视频,比如说https://v.qq.com/x/page/e301156k671.html
运用开发者工具抓包,发现貌似并没有什么有用的信息。
但是,我们可以模拟移动设备试试看。运用开发者工具的强大功能,如图:

果然,这一次,找到了疑似关键信息:

这个json请求内含有fvkeyurl之类的信息。
通过精简地址,把不必要的参数去掉:

1
https://h5vv6.video.qq.com/getinfo?defaultfmt=auto&otype=json&platform=11001&sdtfrom=v5010&sphttps=1&vid=e301156k671

可以看到,这里的vid是e301156k671,其实也就是位于原地址https://v.qq.com/x/page/e301156k671.html中的字符串。
接下来,我们来看看媒体请求:

经检验,这个地址就是视频的真实地址。
仍然是把不必要的参数去除,我们发现只需要保留vkey即可。
回到刚才的那个json请求中,通过对比视频地址和其中的信息,我们可以猜想最终地址是url+fn+vkey
拼凑后成功得到了最终视频地址。

于是,就可以轻松地编写python程序完成上述操作了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests,re,json

vid=input('输入vid: ')
url='https://h5vv6.video.qq.com/getinfo?defaultfmt=auto&otype=json&platform=11001&sdtfrom=v5010&sphttps=1&vid='+vid
jsons=requests.get(url).text
p=re.compile(r'({.*})', re.S)
jsons=re.findall(p, jsons)[0] #取QZOutputJson=中间内容
res=json.loads(jsons)
fvkey=res['vl']['vi'][0]['fvkey']
fn=res['vl']['vi'][0]['fn']
yurl=res['vl']['vi'][0]['ul']['ui'][0]['url']
#有多个url可供选择,可能是多个视频源,这里就选择第一个
url=yurl+fn+'?vkey='+fvkey
print(url)

以上是一个较简单的示例,通过视频的vid (例如e301156k671)获取真实视频地址。
如果要实现更强大的地址解析功能(如清晰度选择),可以自行研究研究。
此方法仅适用于像示例视频一样的单视频,可能存在一些问题。