<!--
IMPORTANT: This file is generated from the template at 'scripts/templates/README.md'.
Please update the template instead of this file.
-->
# aria2p
[![ci](https://github.com/pawamoy/aria2p/workflows/ci/badge.svg)](https://github.com/pawamoy/aria2p/actions?query=workflow%3Aci)
[![documentation](https://img.shields.io/badge/docs-mkdocs%20material-blue.svg?style=flat)](https://pawamoy.github.io/aria2p/)
[![pypi version](https://img.shields.io/pypi/v/aria2p.svg)](https://pypi.org/project/aria2p/)
[![Gitter](https://badges.gitter.im/aria2p/community.svg)](https://gitter.im/aria2p/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![support](https://img.shields.io/badge/sponsor-or%20donate-blue.svg?style=flat)](#support)
Command-line tool and Python library to interact with an [`aria2c`][1] daemon process through JSON-RPC.
![demo](https://user-images.githubusercontent.com/3999221/72664104-41658180-39fa-11ea-838e-022ed29d8c0b.gif)
To avoid confusion:
- [*aria2*][1] is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line.
It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.
- `aria2c` is the name of the command-line executable provided by *aria2*. It can act as a daemon.
- `aria2p` (`p` for Python) is a command-line client that can interact with an `aria2c` daemon.
It is not an official client. There are other Python packages allowing you to interact with an `aria2c` daemon.
These other packages do not offer enough usability (in my opinion), this is why I'm developing `aria2p`.
**Purpose**: `aria2c` can run in the foreground, for one-time downloads, or in the background, as a daemon.
This is where `aria2p` intervenes: when an instance of `aria2c` is running in the background,
`aria2p` will be able to communicate with it to add downloads to the queue, remove, pause or resume them, etc.
In order for `aria2p` to be able to communicate with the `aria2c` process, RPC mode must be enabled
with the `--enable-rpc` option of `aria2c`. RPC stands for [Remote Procedure Call][2].
Although `aria2c` supports both JSON-RPC and XML-RPC protocols, `aria2p` **works with JSON only** (not XML).
More information about how to configure `aria2c` to run as a daemon with RPC mode enabled
can be found in the [Configuration section][conf doc] of the documentation.
[conf doc]: https://aria2p.readthedocs.io/en/latest/configuration.html
**Table of contents**
- [Requirements](#requirements)
- [Installation](#installation)
- [Usage as a library](#usage-as-a-library)
- [Usage on the command line](#usage-command-line)
- [Troubleshoot](#troubleshoot)
- [Support](#support)
## Requirements
`aria2p` requires Python 3.6 or above.
<details>
<summary>To install Python 3.6, I recommend using <a href="https://github.com/pyenv/pyenv"><code>pyenv</code></a>.</summary>
```bash
# install pyenv
git clone https://github.com/pyenv/pyenv ~/.pyenv
# setup pyenv (you should also put these three lines in .bashrc or similar)
export PATH="${HOME}/.pyenv/bin:${PATH}"
export PYENV_ROOT="${HOME}/.pyenv"
eval "$(pyenv init -)"
# install Python 3.6
pyenv install 3.6.8
# make it available globally
pyenv global system 3.6.8
```
</details>
You must also install [*aria2*][1]. On systems with `apt-get`:
```bash
sudo apt-get install aria2
```
[1]: https://github.com/aria2/aria2
[2]: https://en.wikipedia.org/wiki/Remote_procedure_call
## Installation
With `pip`:
```bash
python3.6 -m pip install aria2p[tui]
```
With [`pipx`](https://github.com/pipxproject/pipx):
```bash
python3.6 -m pip install --user pipx
pipx install --python python3.6 aria2p[tui]
```
The `tui` extra is needed for the interactive interface. If you don't need the interface (for example when you are
writing a Python package with a dependency to aria2p), simply install `aria2p` without any extra.
## Usage (as a library)
**This library is still a work in progress. More examples will be added later.
In the meantime, you can read the [Reference section](https://aria2p.readthedocs.io/en/latest/reference.html) on the official documentation.**
```python
import aria2p
# initialization, these are the default values
aria2 = aria2p.API(
aria2p.Client(
host="http://localhost",
port=6800,
secret=""
)
)
# list downloads
downloads = aria2.get_downloads()
for download in downloads:
print(download.name, download.download_speed)
# add downloads
magnet_uri = "magnet:?xt=urn:..."
download = aria2.add_magnet(magnet_uri)
```
## Usage (command-line)
```
usage: aria2p [GLOBAL_OPTS...] COMMAND [COMMAND_OPTS...]
Command-line tool and Python library to interact with an `aria2c` daemon
process through JSON-RPC.
Global options:
-h, --help Show this help message and exit. Commands also accept
the -h/--help option.
-p PORT, --port PORT Port to use to connect to the remote server.
-H HOST, --host HOST Host address for the remote server.
-s SECRET, --secret SECRET
Secret token to use to connect to the remote server.
-L {TRACE,DEBUG,INFO,SUCCESS,WARNING,ERROR,CRITICAL}, --log-level {TRACE,DEBUG,INFO,SUCCESS,WARNING,ERROR,CRITICAL}
Log level to use
-P LOG_PATH, --log-path LOG_PATH
Log path to use. Can be a directory or a file.
-T CLIENT_TIMEOUT, --client-timeout CLIENT_TIMEOUT
Timeout in seconds for requests to the remote server.
Floats supported. Default: 60.0.
Commands:
add Add downloads with URIs/Magnets/torrents/Metalinks.
add-magnets (add-magnet)
Add downloads with Magnet URIs.
add-metalinks (add-metalink)
Add downloads with Metalink files.
add-torrents (add-torrent)
Add downloads with torrent files.
autopurge (autoclear)
Automatically purge completed/removed/failed
downloads.
call Call a remote method through the JSON-RPC client.
pause (stop) Pause downloads.
remove (rm, del, delete)
Remove downloads.
resume (start) Resume downloads.
show Show the download progression.
top Launch the top-like interactive interface.
listen Listen to notifications.
```
Calling `aria2p` without any arguments will by default call the `top` command,
which is a console interactive interface.
Commands:
- [`add`](#add)
- [`add-magnets`](#add-magnets)
- [`add-metalinks`](#add-metalinks)
- [`add-torrents`](#add-torrents)
- [`autopurge`](#autopurge)
- [`call`](#call)
- [`listen`](#listen)
- [`pause`](#pause)
- [`remove`](#remove)
- [`resume`](#resume)
- [`show`](#show)
- [`top`](#top)
---
### `add`
```
usage: aria2p add [-h] [-f FROM_FILE] [uris [uris ...]]
Add downloads with URIs/Magnets/torrents/Metalinks.
positional arguments:
uris The URIs/file-paths to add.
optional arguments:
-h, --help Show this help message and exit.
-f FROM_FILE, --from-file FROM_FILE
Load URIs from a file.
```
---
### `add-magnets`
```
usage: aria2p add-magnets [-h] [-f FROM_FILE] [uris [uris ...]]
Add downloads with Magnet URIs.
positional arguments:
uris The magnet URIs to add.
optional arguments:
-h, --help Show this help message and exit.
-f FROM_FILE, --from-file FROM_FILE
Load URIs from a file.
```
---
### `add-metalinks`
```
usage: aria2p add-metalinks [-h] [-f FROM_FILE]
[metalink_files [metalink_files ...]]
Add downloads with Metalink files.
positional arguments:
metalink_files The paths to the metalink files.
optional arguments:
-h, --help Show this help message and exit.
-f FROM_FILE, --from-file FROM_FILE