一、工具
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.mp4https://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 requestsimport jsonvideo_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、以后可以做成模块,方便调用
