背景
-
1、从公众号获取视频,放到自己的app上展示
-
2、后来发现其实简单的通过
iframe
标签就搞定 -
3、我最先的想法是把视频转存,然后放到七牛上,这才有了处理腾讯视屏的坑
分析网站(业务没用上)
通过分析网站发现,视频都是一段段的请求的,然后组合起来,展示视频
-
1、腾讯视频最重要的是先获取到视频的vid,之后通过一系列的拼接url获取数据
-
2、 使用vid和
'http://vv.video.qq.com/getinfo?vids=%s&platform=101001&charge=0&otype=json&defn=shd'
拼接,并请求,获取视频的基本信息和key等关键信息 -
3、解析json数据,拼接视屏下载url,url主要是以域名和vkey拼接而成
-
4、拿到download_url 之后,使用
urllibe.requet
的方法,直接获取到目标url资源
-5、贴上源码,以备不测
from urllib import request
import json
import QiniuClient
def down(download_url, video_name):
request.urlretrieve(download_url, filename=video_name, reporthook=report, data=None)
def report(a, b, c):
"""
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
"""
per = 100.0 * a * b / c
if per > 100:
per = 100
print('%.2f%%' % per)
template_url = 'http://vv.video.qq.com/getinfo?vids=%s&platform=101001&charge=0&otype=json&defn=shd'
def tecent_parse(target_url):
vid = target_url[len('https://v.qq.com/x/page/'):-5]
response = request.urlopen(request.Request(template_url % vid)).read().decode('utf-8')
json_data = response[len('QZOutputJson='):-1]
json_obj = json.loads(json_data)
download_url = json_obj['vl']['vi'][0]['ul']['ui'][0]['url'] + json_obj['vl']['vi'][0]['fn'] + '?vkey=' + \
json_obj['vl']['vi'][0]['fvkey']
video_name = json_obj['vl']['vi'][0]['ti'] + "." + json_obj['fl']['fi'][1]['name']
return download_url, video_name
if __name__ == '__main__':
url = 'https://v.qq.com/x/page/k0815w0wxm9.html'
if 'https://v.qq.com/x/page/' in url:
down_url, vid_name = tecent_parse(url)
else:
print("it's not supported")
down(down_url, vid_name)
file_key = QiniuClient.upload_local_file(QiniuClient.QiniuClient.UPLOAD_VIDEO, vid_name)
cover_link = QiniuClient.get_full_path(file_key)
print(cover_link)
再记录下使用iframe的坑
- 1、这是一个html的标签,能够造一个小框框出来,嵌入要播放的视频连接(根据我自己的用途)
- 2、这个标签可以直接嵌入腾讯视频的播放页网址,会有封面,但是很坑的是,播放前会有广告,还是长广告,一分钟的那种,后来发现另一个解析之后的链接,是没有广告的
# 这个链接拼接上vid之后,会自适应iframe的宽高
https://v.qq.com/iframe/preview.html?auto=0&vid={}
- 3 由于前端技术有限,百度了很久之后,才把这个框框的宽高弄刚刚好,贴一下简单的前段代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body style="text-align: center">
<br>
<p>{}</p>
<br>
<br>
<div>
<iframe style="width: 100%; height: 550px" class="div" frameborder="1" src={} allowFullScreen="true"></iframe>
</div>
</body>
</html>
网友评论