php-aria2 ========= # Talk with aria2 using json-RPC ## Install ### 1. Install aria2c Make sure aria2c is running and rpc is enabled, You can add this into /etc/rc.local `/usr/local/bin/aria2c --enable-rpc --rpc-allow-origin-all -c -D` > [Also See The Document of Aria2](https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface) ### 2. Require Aria2.php The codes just 50 lines but support all RPC methods. Using php's magic method `__call` #### 2.1 Install by composer `composer require daijie/aria2` > Thanks to [@Yuav](https://github.com/Yuav) #### 2.2 Or copy Aria2.php ## Docker playground #### require [docker-compose](https://docs.docker.com/compose/install/) #### init playground ``` git clone https://github.com/shiny/php-aria2/ cd php-aria2/playground docker-compose up docker-compose exec php composer require daijie/aria2 ``` #### After that, the playground structure: ``` ├── 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 ``` Edit www/index.php and Open Browser To Visit http://127.0.0.1 ## Class Aria2 ``` Aria2 { __construct ( string $server [, string $token ] ) __destruct ( void ) __call(string $name, array $arg) protected string req ( array $data ) } ``` ## Usage $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 ... Also See [Manual of Aria2 RPC Interface to get the method list](https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface) ## Updates ### v1.1 Now support default token(secret) in php-aria2, compatible with v1.0 Before ``` $aria2 = new Aria2('http://aria2:6800/jsonrpc'); $aria2->addUri( "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db", ['https://www.docker.com/sites/default/files/moby.svg'] ); $aria2->getGlobalStat("token:e6c3778f-6361-4ed0-b126-f2cf8fca06db"); ``` After ``` $aria2 = new Aria2('http://aria2:6800/jsonrpc', "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db"); $aria2->addUri( ['https://www.docker.com/sites/default/files/moby.svg'] ); $status = $aria2->getGlobalStat(); ``` ### Example #1: Download File $aria2->addUri( ['https://www.google.com.hk/images/srpr/logo3w.png'], ['dir'=>'/tmp'] ); [More Options Here](https://aria2.github.io/manual/en/html/aria2c.html#input-file) #### Example #2: The Returned Data #### Case: `Can't Download` array(3) { ["id"]=> string(1) "1" ["jsonrpc"]=> string(3) "2.0" ["result"]=> array(13) { ["completedLength"]=> string(1) "0" ["connections"]=> string(1) "0" ["dir"]=> string(4) "/tmp" ["downloadSpeed"]=> string(1) "0" ["errorCode"]=> string(1) "1" ["files"]=> array(1) { [0]=> array(6) { ["completedLength"]=> string(1) "0" ["index"]=> string(1) "1" ["length"]=> string(1) "0" ["path"]=> string(0) "" ["selected"]=> string(4) "true" ["uris"]=> array(1) { [0]=> array(2) { ["status"]=> string(4) "used" ["uri"]=> string(48) "https://www.google.com.hk/images/srpr/logo3w.png" } } } } ["gid"]=> string(1) "2" ["numPieces"]=> string(1) "0" ["pieceLength"]=> string(7) "1048576" ["status"]=> string(5) "error" ["totalLength"]=> string(1) "0" ["uploadLength"]=> string(1) "0" ["uploadSpeed"]=> string(1) "0" } } #### Case: `Downloading (Active)` array(3) { ["id"]=> string(1) "1" ["jsonrpc"]=> string(3) "2.0" ["result"]=> array(13) { ["bitfield"]=> string(8) "e0000000" ["completedLength"]=> string(7) "3932160" ["connections"]=> string(1) "1" ["dir"]=> string(18) "/data/files/lixian" ["downloadSpeed"]=> string(5) "75972" ["files"]=> array(1) { [0]=> array(6) { ["completedLength"]=> string(7) "3145728" ["index"]=> string(1) "1" ["length"]=> string(8) "31550548" ["path"]=> string(48) "/data/files/lixian/[茶经].陆羽.扫描版.pdf" ["selected"]=> string(4) "true" ["uris"]=> array(5) { [0]=> array(2) { ["status"]=> string(4) "used" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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"]=> string(1) "3" ["numPieces"]=> string(2) "31" ["pieceLength"]=> string(7) "1048576" ["status"]=> string(6) "active" ["totalLength"]=> string(8) "31550548" ["uploadLength"]=> string(1) "0" ["uploadSpeed"]=> string(1) "0" } } #### Case: `Downloaded` array(3) { ["id"]=> string(1) "1" ["jsonrpc"]=> string(3) "2.0" ["result"]=> array(14) { ["bitfield"]=> string(8) "fffffffe" ["completedLength"]=> string(8) "31550548" ["connections"]=> string(1) "0" ["dir"]=> string(18) "/data/files/lixian" ["downloadSpeed"]=> string(1) "0" ["errorCode"]=> string(1) "0" ["files"]=> array(1) { [0]=> array(6) { ["completedLength"]=> string(8) "31550548" ["index"]=> string(1) "1" ["length"]=> string(8) "31550548" ["path"]=> string(48) "/data/files/lixian/[茶经].陆羽.扫描版.pdf" ["selected"]=> string(4) "true" ["uris"]=> array(6) { [0]=> array(2) { ["status"]=> string(4) "used" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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(2) { ["status"]=> string(7) "waiting" ["uri"]=> string(417) "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"]=> string(1) "3" ["numPieces"]=> string(2) "31" ["pieceLength"]=> string(7) "1048576" ["status"]=> string(8) "complete" ["totalLength"]=> string(8) "31550548" ["uploadLength"]=> string(1) "0" ["uploadSpeed"]=> string(1) "0" } }