大结/aria2

与 aria2 通信

资助包维护!
tealight-uk

v1.2.1b 2017-01-03 14:17 UTC

This package is auto-updated.

Last update: 2024-09-11 10:23:24 UTC


README

通过 JSON-RPC 与 aria2 通信

  1. 安装
  2. 类 Aria2
    1. 用法
    2. 批量请求
    3. 系统方法
    4. 示例 #1: 下载文件
    5. 示例 #2: 返回的数据
      1. 无法下载
      2. 下载中(活动)
      3. 已下载
  3. Docker 演示场
  4. 更新
  5. 贡献者

安装

1. 安装 aria2c

确保 aria2c 正在运行且已启用 RPC,可以将以下内容添加到 /etc/rc.local /usr/local/bin/aria2c --enable-rpc --rpc-allow-origin-all -c -D

另请参阅 Aria2 文档

2. 需要Aria2.php

代码仅82行,但支持所有 RPC 方法。使用 PHP 的魔术方法 __call

2.1 通过 composer 安装

composer require daijie/aria2

2.2 或复制 Aria2.php

类 Aria2

Aria2 {
    __construct ( string $server [, string $token ] )
    __destruct ( void )
    __call(string $name, array $arg)
    public Object batch( [Callable $func ] )
    public bool inBatch( void )
    public array commit( void )
    protected string req ( array $data )
}

用法

$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc'); 
// http://127.0.0.1:6800/jsonrpc is the default value, 
// equals to $aria2 = new Aria2
$aria2->getGlobalStat();
$aria2->tellActive();
$aria2->tellWaiting(0,1000);
$aria2->tellStopped(0,1000);
$aria2->addUri(
	['https://www.google.com.hk/images/srpr/logo3w.png'],
	['dir'=>'/tmp']
);
$aria2->tellStatus('1');
$aria2->removeDownloadResult('1');
//and more ...

另请参阅 Aria2 RPC 接口手册以获取方法列表

例如,这是 Aria2 手册中用 Python 编写的示例

>>> import urllib2, json, base64
>>> metalink = base64.b64encode(open('file.meta4').read())
>>> jsonreq = json.dumps({'jsonrpc':'2.0', 'id':'qwer',
...                       'method':'aria2.addMetalink',
...                       'params':[metalink]})
>>> c = urllib2.urlopen('https://:6800/jsonrpc', jsonreq)
>>> c.read()
'{"id":"qwer","jsonrpc":"2.0","result":["2089b05ecca3d829"]}'

如果你使用 php-aria2 与 PHP

<?php
require 'vendor/autoload.php';
$metalink = file_get_contents('file.meta4');
$aria2 = new Aria2('https://:6800/jsonrpc');
$c = $aria2->addMetalink($metalink);
#It means the method is aria2.addMetalink
print_r($c); 

批量请求

现在 php-aria2 支持 v1.2.0 中的 JSON-RPC 2.0 规范批量请求。在 v1.2.0 中引入了批量请求。

  • Aria2::batch - 开始批量模式
  • Aria2::inBatch - 检测批量模式
  • Aria2::commit - 结束批量模式并提交命令
$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc');
$aria2->batch()
      ->getGlobalStat()
      ->tellActive()
      ->tellWaiting(0,1000)
      ->tellStopped(0,1000)
      ->addUri(
			['https://www.google.com.hk/images/srpr/logo3w.png'],
			['dir'=>'/tmp']
		)
		->commit();

另一种方式是匿名函数,它也支持方法链。不要忘记提交。

$aria2 = new Aria2('http://aria2:6800/jsonrpc', "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db");
$aria2->batch(function($aria2){
    $aria2->getGlobalStat();
    $aria2->system_listMethods();
});
$status = $aria2->commit();

系统方法

  • system.multicall
  • system.listMethods
  • system.listNotifications

有一些系统方法,你可以使用以下方式调用它们

  • Aria2::system_multicall
  • Aria2::system_listMethods
  • Aria2::system_listNotifications

php-aria2 自动将 _ 转换为 .。如果方法名没有 _,php-aria2 将自动在前面添加 aria2.

$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc');
$aria2->system_listMethods();
$aria2->getGlobalStat();

示例 #1: 下载文件

$aria2->addUri(
	['https://www.google.com.hk/images/srpr/logo3w.png'],
	['dir'=>'/tmp']
);

更多选项在这里

示例 #2: 返回的数据

案例:无法下载

Array
(
    [id] => 1
    [jsonrpc] => 2.0
    [result] => Array
        (
            [completedLength] => 0
            [connections] => 0
            [dir] => /tmp
            [downloadSpeed] => 0
            [errorCode] => 1
            [files] => Array
                (
                    [0] => Array
                        (
                            [completedLength] => 0
                            [index] => 1
                            [length] => 0
                            [path] => 
                            [selected] => true
                            [uris] => Array
                                (
                                    [0] => Array
                                        (
                                            [status] => used
                                            [uri] => https://www.google.com.hk/images/srpr/logo3w.png
                                        )

                                )

                        )

                )
            [gid] => 2
            [numPieces] => 0
            [pieceLength] => 1048576
            [status] => error
            [totalLength] => 0
            [uploadLength] => 0
            [uploadSpeed] => 0
        )

)

案例:下载中(活动)

Array
(
    [id] => 1
    [jsonrpc] => 2.0
    [result] => Array
        (
            [bitfield] => e0000000
            [completedLength] => 3932160
            [connections] => 1
            [dir] => /data/files/lixian
            [downloadSpeed] => 75972
            [files] => Array
                (
                    [0] => Array
                        (
                            [completedLength] => 3145728
                            [index] => 1
                            [length] => 31550548
                            [path] => /data/files/lixian/茶经.陆羽.扫描版.pdf
                            [selected] => true
                            [uris] => Array
                                (
                                    [0] => Array
                                        (
                                            [status] => used
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [1] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [2] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [3] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [4] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                )

                        )

                )
            [gid] => 3
            [numPieces] => 31
            [pieceLength] => 1048576
            [status] => active
            [totalLength] => 31550548
            [uploadLength] => 0
            [uploadSpeed] => 0
        )

)

案例:已下载

Array
(
    [id] => 1
    [jsonrpc] => 2.0
    [result] => Array
        (
            [bitfield] => fffffffe
            [completedLength] => 31550548
            [connections] => 0
            [dir] => /data/files/lixian
            [downloadSpeed] => 0
            [errorCode] => 0
            [files] => Array
                (
                    [0] => Array
                        (
                            [completedLength] => 31550548
                            [index] => 1
                            [length] => 31550548
                            [path] => /data/files/lixian/茶经.陆羽.扫描版.pdf
                            [selected] => true
                            [uris] => Array
                                (
                                    [0] => Array
                                        (
                                            [status] => used
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [1] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [2] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [3] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [4] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                    [5] => Array
                                        (
                                            [status] => waiting
                                            [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1
                                        )

                                )

                        )

                )
            [gid] => 3
            [numPieces] => 31
            [pieceLength] => 1048576
            [status] => complete
            [totalLength] => 31550548
            [uploadLength] => 0
            [uploadSpeed] => 0
        )

)

Docker 演示场

require docker-compose

Docker 演示场:nginx (17 MB) + php7-fpm (82 MB) + aria2c (6 MB)

初始化演示场

git clone https://github.com/shiny/php-aria2/
cd php-aria2/playground
docker-compose up

然后在另一个终端中输入 playground

docker-compose exec php composer require daijie/aria2

对于中国用户,我们建议使用 phpcomposer 镜像

docker-compose exec php composer config repo.packagist composer https://packagist.phpcomposer.com
docker-compose exec php composer require daijie/aria2

之后,演示场结构

├── aria2.conf # Aria2 conf file
├── data # Store downloaded file
├── docker-compose.yml
├── nginx.conf # nginx conf
└── www # Web dir
    ├── composer.json
    ├── composer.lock
    ├── index.php
    └── vendor
        ├── autoload.php
        ├── composer
        │   ├── ClassLoader.php
        │   ├── LICENSE
        │   ├── autoload_classmap.php
        │   ├── autoload_namespaces.php
        │   ├── autoload_psr4.php
        │   ├── autoload_real.php
        │   ├── autoload_static.php
        │   └── installed.json
        └── daijie
            └── aria2
                ├── Aria2.php
                ├── LICENSE.txt
                ├── README.md
                └── composer.json

编辑 www/index.php 并在浏览器中访问 http://127.0.0.1:8080

更新

v1.2.1b

  • 添加批量匿名函数

v1.2.0b

  • 添加系统方法
  • 添加批量模式

v1.1

现在支持 php-aria2 中的默认令牌(密钥),与 v1.0 兼容

之前

$aria2 = new Aria2('http://aria2:6800/jsonrpc');
$aria2->addUri(
    "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db",
    ['https://dockerd.com.cn/sites/default/files/moby.svg']
);
$aria2->getGlobalStat("token:e6c3778f-6361-4ed0-b126-f2cf8fca06db");

之后

$aria2 = new Aria2('http://aria2:6800/jsonrpc', "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db");
$aria2->addUri(
    ['https://dockerd.com.cn/sites/default/files/moby.svg']
);
$status = $aria2->getGlobalStat();

贡献者