一、工具
aria2
aria2我使用的是Qdown链接,基本配置如下:
生成RPC秘钥(主要是安全,当然也可以不生成)
Qdown将port默认设置为2800(可以在”C:\Users\用户.Qdown\aria2.conf”中rpc-listen-port=2800修改成6800,就不用修改AriaNg的端口了)
AriaNg
我使用的是 Aria2 for Chrome,主要是为了抓包,基本配置如下:
右键Aria2 for Chrome 点击选项 新增json-rpc,在AriaNg中修改端口号为2800,添加Qdown中生成的秘钥,重新加载界面后,显示Aria2状态为已连接,配置完成
二、获取json数据格式
准备几个可以下载的视频地址
https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4
https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_b102d23686622da5134068cb3616b562.mp4
在 Aria2 for Chrome 选择新建,复制地址到下载连接中,打开chrome控制台选择Network,清空内容
点击立即下载,查看新生成列表中,Request Payload部分
复制内容,美化后如下,即为post请求中的json数据
{
"jsonrpc": "2.0",
"method": "aria2.addUri",
"id": "QXJpYU5nXzE1OTE4NTQ5MTFfMC40NzkwMzE5MzI3NjU0OTg2",
"params": [
"token:werqrqrasfatertg",
[
"https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4"
],
{}
]
}
三、代码
import requests
import json
video_urls = [
"https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4",
"https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_b102d23686622da5134068cb3616b562.mp4"
]
aria2_url = "http://localhost:2800/jsonrpc"
for index, videoss in enumerate(video_urls):
jsonreq = json.dumps({
"jsonrpc": "2.0",
"method": "aria2.addUri",
"id": index,
"params": [
"token:werqrqrasfatertg",
[video_urls[index]],
{}
]
})
c = requests.post(url=aria2_url, data=jsonreq)
print(c.text)
四、总结
参考链接
m3u8文件下载合并的一种方法
Python脚本调用aria2爬取.m3u8文件中的.ts视频
aria2官方文档
学习体会
遗留问题
1、使用相同方法获取Torrent的json格式后,发送请求失败,显示参数错误,用官方接口依旧如此
>>> import urllib2, json, base64
>>> from pprint import pprint
>>> jsonreq = json.dumps({'jsonrpc':'2.0', 'id':'qwer',
... 'method':'system.multicall',
... 'params':[[{'methodName':'aria2.addUri',
... 'params':[['http://example.org']]},
... {'methodName':'aria2.addTorrent',
... 'params':[base64.b64encode(open('file.torrent').read())]}]]})
>>> c = urllib2.urlopen('http://localhost:6800/jsonrpc', jsonreq)
>>> pprint(json.loads(c.read()))
{u'id': u'qwer', u'jsonrpc': u'2.0', u'result': [[u'2089b05ecca3d829'], [u'd2703803b52216d1']]}
2、即使视频地址错误,依旧可以下载,返回同样为200,只是在Qdown中显示下载失败
3、以后可以做成模块,方便调用