python使用aria2下载视频、使用JSON-RPC

安装

Windows下直接通过github下载对应的exe。
CentOS下可以通过yum安装。

yum install epel-release -y
yum install aria2 -y

直接调用aria2c

以下是一个使用Python和Aria2下载视频并判断是否下载成功的示例代码:

import os
import subprocess

# 设置Aria2的路径和下载目录
aria2_path = '/usr/local/bin/aria2c'
download_dir = '/Users/username/Downloads'

# 下载视频的URL
video_url = 'https://example.com/video.mp4'

# 使用Aria2下载视频
command = [aria2_path, '-d', download_dir, 
           "-x", "16", "-s", "16", "-k", "1M", video_url]
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()

# 判断是否下载成功
if os.path.exists(os.path.join(download_dir, 'video.mp4')):
    print('视频下载成功!')
else:
    print('视频下载失败!')

在上面的代码中,我们首先设置了Aria2的路径和下载目录,然后指定了要下载的视频的URL。
我们使用了aria2c的一些参数来加速下载。-x-s参数指定了同时下载的连接数和服务器数。-k参数指定了每个连接的块大小。
接着,我们使用subprocess模块启动一个Aria2进程,并将输出和错误信息存储在outputerror变量中。最后,我们判断下载目录中是否存在名为video.mp4的文件,如果存在则表示下载成功,否则表示下载失败。

JSON-RPC

配置服务

文件:/opt/aria2/aria2.conf

#用户名
#rpc-user=user

#密码
#rpc-passwd=passwd

#设置加密的密钥
#rpc-secret=secret

#允许rpc
enable-rpc=true

#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true

#是否启用https加密,启用之后要设置公钥,私钥的文件路径

#rpc-secure=true
#启用加密设置公钥

#rpc-certificate=/home/name/.config/aria2/example.crt

#启用加密设置私钥
#rpc-private-key=/home/name/.config/aria2/example.key

#允许外部访问,false的话只监听本地端口
rpc-listen-all=true

#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800

#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5

#断点续传
continue=true

#同服务器连接数
max-connection-per-server=5

#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M

#单文件最大线程数, 路由建议值: 5
split=10

#下载速度限制
max-overall-download-limit=0

#单文件速度限制
max-download-limit=0

#上传速度限制
max-overall-upload-limit=0

#单文件速度限制
max-upload-limit=0

#断开速度过慢的连接
#lowest-speed-limit=0

#验证用,需要1.16.1之后的release版本
#referer=*

#文件保存路径, 默认为当前启动位置
dir=/home/gameboy/Downloads

#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)

#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长

#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=prealloc

#不进行证书校验
check-certificate=false

运行

aria2c --conf-path=/opt/aria2/aria2.conf

python JSON-RPC 调用

import requests

headers = {
    'Content-Type': 'application/json',
}

json_data = {
    'jsonrpc': '2.0',
    'id': '1',
    'method': 'aria2.addUri',
    'params': [
        [
            'http://example.com/file.jpg',
        ],
        {
            'dir': '/down',
            "out": "1.jpg"
        },
    ],
}

response = requests.post('http://127.0.0.1:6800/jsonrpc', headers=headers, json=json_data)

1

封装成类

以下是一个简单的Python脚本,用于整合Aria2的JSON-RPC API:

import json
import requests

class Aria2RPC:
    def __init__(self, url):
        self.url = url
        self.headers = {'Content-Type': 'application/json'}
        self.id = 0

    def _request(self, method, params=None):
        self.id += 1
        payload = {'jsonrpc': '2.0', 'id': self.id, 'method': method}
        if params:
            payload['params'] = params
        response = requests.post(self.url, headers=self.headers, data=json.dumps(payload))
        return response.json()

    def add_uri(self, uri):
        return self._request('aria2.addUri', [[uri]])

    def tell_active(self):
        return self._request('aria2.tellActive')

    def tell_status(self, gid):
        return self._request('aria2.tellStatus', [gid])

    def pause(self, gid):
        return self._request('aria2.pause', [gid])

    def unpause(self, gid):
        return self._request('aria2.unpause', [gid])

    def remove(self, gid):
        return self._request('aria2.remove', [gid])

    def get_global_stat(self):
        return self._request('aria2.getGlobalStat')

    def get_version(self):
        return self._request('aria2.getVersion')

使用示例:

rpc = Aria2RPC('http://localhost:6800/jsonrpc')
result = rpc.add_uri('http://example.com/file.zip')
gid = result['result']
status = rpc.tell_status(gid)
print(status)

参考

https://aria2.github.io/manual/en/html/index.html
https://github.com/zhenlohuang/pyaria2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙在山东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值