Python uses aria2 to download videos and JSON-RPC

The following is a sample code that uses Python and Aria2 to download a video and determine whether the download is successful:

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('视频下载失败!')

In the above code, we first set the path and download directory of Aria2, and then specified the URL of the video to be downloaded.
We use some parameters of aria2c to speed up downloading. -xand -sparameters specify the number of simultaneous download connections and servers. -kThe parameter specifies the block size for each connection.
Next, we use subprocessthe module to start an Aria2 process and store the output and error information in the outputand errorvariables. Finally, we determine whether video.mp4the file named exists in the download directory. If it exists, it means the download is successful, otherwise it means the download fails.

JSON-RPC

The following is a simple Python script for integrating Aria2’s 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')

Usage example:

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)

reference

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

Guess you like

Origin blog.csdn.net/lilongsy/article/details/130306591