一、工具

aria2

aria2我使用的是Qdown链接,基本配置如下:
image.pngimage.png
生成RPC秘钥(主要是安全,当然也可以不生成)
Qdown将port默认设置为2800(可以在”C:\Users\用户.Qdown\aria2.conf”中rpc-listen-port=2800修改成6800,就不用修改AriaNg的端口了)

AriaNg

我使用的是 Aria2 for Chrome,主要是为了抓包,基本配置如下:
image.pngimage.png
右键Aria2 for Chrome 点击选项 新增json-rpc,在AriaNg中修改端口号为2800,添加Qdown中生成的秘钥,重新加载界面后,显示Aria2状态为已连接,配置完成

二、获取json数据格式

准备几个可以下载的视频地址

  1. https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4
  2. https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_b102d23686622da5134068cb3616b562.mp4

在 Aria2 for Chrome 选择新建,复制地址到下载连接中,打开chrome控制台选择Network,清空内容image.png
点击立即下载,查看新生成列表中,Request Payload部分image.png
复制内容,美化后如下,即为post请求中的json数据

  1. {
  2. "jsonrpc": "2.0",
  3. "method": "aria2.addUri",
  4. "id": "QXJpYU5nXzE1OTE4NTQ5MTFfMC40NzkwMzE5MzI3NjU0OTg2",
  5. "params": [
  6. "token:werqrqrasfatertg",
  7. [
  8. "https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4"
  9. ],
  10. {}
  11. ]
  12. }

三、代码

  1. import requests
  2. import json
  3. video_urls = [
  4. "https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_634b1aeaeb595b2e6fba89229ab2ad6a.mp4",
  5. "https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/60_b102d23686622da5134068cb3616b562.mp4"
  6. ]
  7. aria2_url = "http://localhost:2800/jsonrpc"
  8. for index, videoss in enumerate(video_urls):
  9. jsonreq = json.dumps({
  10. "jsonrpc": "2.0",
  11. "method": "aria2.addUri",
  12. "id": index,
  13. "params": [
  14. "token:werqrqrasfatertg",
  15. [video_urls[index]],
  16. {}
  17. ]
  18. })
  19. c = requests.post(url=aria2_url, data=jsonreq)
  20. print(c.text)

四、总结

参考链接

m3u8文件下载合并的一种方法
Python脚本调用aria2爬取.m3u8文件中的.ts视频
aria2官方文档

学习体会

学会如何用python调用aria2的方法**

遗留问题

1、使用相同方法获取Torrent的json格式后,发送请求失败,显示参数错误,用官方接口依旧如此

  1. >>> import urllib2, json, base64
  2. >>> from pprint import pprint
  3. >>> jsonreq = json.dumps({'jsonrpc':'2.0', 'id':'qwer',
  4. ... 'method':'system.multicall',
  5. ... 'params':[[{'methodName':'aria2.addUri',
  6. ... 'params':[['http://example.org']]},
  7. ... {'methodName':'aria2.addTorrent',
  8. ... 'params':[base64.b64encode(open('file.torrent').read())]}]]})
  9. >>> c = urllib2.urlopen('http://localhost:6800/jsonrpc', jsonreq)
  10. >>> pprint(json.loads(c.read()))
  11. {u'id': u'qwer', u'jsonrpc': u'2.0', u'result': [[u'2089b05ecca3d829'], [u'd2703803b52216d1']]}

2、即使视频地址错误,依旧可以下载,返回同样为200,只是在Qdown中显示下载失败
3、以后可以做成模块,方便调用