背景

博主打算造一个能从 Telegram 自动下载文件/媒体并自动上传至 Google Drive 的轮子,自动上传的功能已经有现成的轮子可以拼上了,生成直链的轮子也找到了,就差联动Aria2 JSON-RPCPython了,但是无奈找了半天都没有解决,最后还是问了大佬才搞定,遂记录。

其实本来看着JSON-RPC就比较复杂,相比之下XML-RPC就显得善良许多,但是不知道是版本问题还是什么原因,XML-RPC似乎不能使用,最后只好投奔复杂的JSON-RPC了。😭

说实话,我确实找到了不少现成的 Python 库可用,但是想着我只需要下个文件,没必要引入那么多不必要的代码,就想着自己写一小段了。🤔

还有一点就是,我看了好几个PyPI上的相关包,有的不支持新加入的rpc-secret属性,就没法用了。😒

依赖

依赖很少,甚至很多人早就安装好了。😂

$ pip install requests     #Windows
$ pip3 install requests    #MacOS or Linux

代码实现

import json, requests
data = {
"jsonrpc": "2.0",
"method": "aria2.addUri",        #操作为添加下载链接
"id": "1",        #这个 id 没什么用,随便填一个就行,重复也无所谓
"params": ["token:<Your rpc-secret>",["url"]]        #有设置 rpc-secret 参数的将此处 <Your rpc-secret> 替换为自己的 rpc-secret
  }
dl_url = 'https://dl.example.com/example.file'
data['params'][0][1] = dl_url        #自定义下载文件链接
url = ''        #你的 Aria2 服务器完整链接,使用 HTTP(S) 协议,包含端口
#例如 http://aria2.example.com:6800/jsonrpc
response = requests.post(url, data=json.dumps(data))
print(response.text)         #显示请求结果

返回结果示例:

{"id":"1","jsonrpc":"2.0","result":"a68bf66b2db28041"}    

"result" 中即为该下载链接对应的 GID