使用 python 调用 Aria2
前言
感觉大家应该都知道这款下载软件了。。。我就不再赘述了。
下面主要说下如何用 xmlrpc 调用这玩意开始下载。
关于官方文档里提到的诸如查看下载状态一类的先不在这里说了,因为以我的经验来看管理下载还是AriaNg
好用,如何装这个也不说了...
(在往下读之前请确保你的 Aria2 能被 AriaNg
或类似的工具正常使用。
python 的话看官方文档里用 xmlrpc 好点,先贴下官方示例:
# aria2.addUri([secret, ]uris[, options[, position]])
import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:6800/rpc')
s.aria2.addUri(['http://example.org/file'])
用pip装完xmlrpclib以后抄下来前两行就行,如果之前改了 rpc 端口别忘了抄的时候改一下。重点是这个addUri
方法。它负责调用aria2开始下载。
忽略掉secret
和position
,addUri
的第一个参数是带着一堆下载地址的数组,第二个可选参数是传给 Aria2 的参数列表。
参数列表是一个 dict,主要有用的大概是:
max-connection-per-server
,也就是-x
,设置分段下载功能。
split
,设置 n 个线程。
header
,这个不解释了。
dir
,设置目录。如果不设置会下载到默认目录。注意如果使用相对目录,基准是aria2c.exe所在目录
。
out
,文件名。当然前面带一段目录也是可以的。(我没试过在第一个参数中包含多个链接的时候指定文件名。)
referer
,也不解释了。其实在 header 里面指定 referer 也是可以的。
举个例子:
#下载b站视频
import xmlrpclib
rpc = xmlrpclib.ServerProxy('http://localhost:6800/rpc')
#mid, title, aid = getinf()
options = {
"max-connection-per-server": 5,
"split": 5,
"out": "/" + str(mid) + "/" + title + ".flv",
#"dir":
"referer": referer = "https://www.bilibili.com/video/av" + str(aid),
#"header": ["User-Agent:xxx","Referer:xxx"]
#注意header是array不是dict
#错误示例:{"User-Agent": "xxx"}
}
rpc.aria2.addUri([url], options)
addUri的返回值是gid,可以用在其他的一些诸如查看下载状态、控制暂停继续的函数里。如果添加不成功会直接报错。
完整的函数介绍请看https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface
完整的参数在https://aria2.github.io/manual/en/html/aria2c.html#options
参数列表带两个-的就是option字典的键,比如-d, --dir=<DIR>
等效为{"dir": \<DIR\>}。
先写这么多吧...