Sign inSign up

lifailon/torapi

By lifailon

โ€ขUpdated about 1 year ago

Unofficial API (backend) for torrent trackers RuTracker, Kinozal, RuTor and NoNameClub.

Image
API management
0

1.5K

lifailon/torapi repository overview




Unofficial API (backend) for torrent trackers RuTracker, Kinozal, RuTor and NoNameClub. Used for fast and centralized search of distribution, receiving torrent files, magnetic links and detailed information about distribution by movie title, series or distribution identifier, and also provides news RSS feed to all providers with filtering by categories.

You can use the public and free version published on Vercelโ  as well as deploy it yourself on any cloud platform using serverless or local with Dockerโ .

The OpenAPI specification is available on the official Swagger Hubโ  website.

Released under MIT licenseโ .

โ For what

You do not need to use a VPN when using the public version, as this service is in the gateway role, which allows you to integrate the API into any project without network restrictions and also use the news feed on mobile devices, for example through ReadYouโ  or Feederโ . No access token and authorization in the trackers are required for the API to work.

Project is inspired by โœจ Torrent-Api-pyโ  (previously Torrents-Apiโ ) for Russian-speaking torrent providers.

โ Implemented
  • Search by title to get current or all available distributions (from all available pages) from a specified provider (torrent tracker) or from all trackers simultaneously. Each distribution contains a unique identifier (used for search by id), category (used for filtering by category), brief information and a link to download the torrent file.
  • Get a list of categories for all providers and filter search by category.
  • Search by unique distribution identifier of the specified provider for additional information: magnetic link and hash sum for direct download through any torrent client, links to databases about cinema (Kinopoisk and IMDb) and posters, detailed description and content of the giveaways (list of files and their size).
  • Get RSS new feeds for all used providers in formats XML, as well as JSON.
โ Frontend
โ Google Chrome Extension

The implementation of a simple user interface (like Jackettโ ) is available through the Google Chrome extension ๐Ÿฟ Libre Kinopoisk for simultaneously searching for distributions in all available torrent trackers and downloading content via magnet links or torrent files directly from the trackers.

โ Wox Plugin

Torrent Search pluginโ  for quickly searching for distributions in all available torrent trackers through the Woxโ  interface, which is available for installation from the plugins repositoryโ .


โ ๐Ÿ”— Full list of available providers:
Provider nameMirrorsRegistrationFilter for search and RSSSearch by IDRSS
RuTrackerโ 3Yes*CategoryYesNative
Kinozalโ 3Yes*Category, release year, formatYesCustom
RuTorโ 2NoCategoryYesCustom
NoNameClubโ 1NoCategoryYesNative

* Registration is required only when downloading a torrent file via a direct link. All distributions when searching by id (identifier) contain info hash sum and magnet link (already contain current list of torrent-trackers servers), which allow to immediately start loading content distribution or generate torrentfile after downloading metadata using any torrent client, for example qBittorrentโ  (supports RSS and search plugins), Transmissionโ  or Webtorrent Desktopโ .

Access to RSS feeds for RuTracker and NoNameClub is by redirecting the original channel. For Kinozal and RuTor providers, a casted news feed from the homepage has been implemented that supports filtering by categories.


โ ๐Ÿš€ Deploy

You can deploy your own public API to Vercel from this repository, just click the button below and follow the instructions:

Vercel

โ ๐Ÿณ Docker

โ Docker Hub

The project uses GitHub Actionsโ  to build the Docker container and automatically test the functionality of all endpoints.

โ Run

Upload the image and run the container from the Docker Hubโ :

docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped lifailon/torapi:latest

If you are using a proxy server:

docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped \
  -e PROXY_ADDRESS="192.168.3.100" \
  -e PROXY_PORT="9090" \
  -e USERNAME="TorAPI" \
  -e PASSWORD="TorAPI" \
  lifailon/torapi:latest

Replace the contents of the variables for connecting to the Proxy server with your own. If you do not use authorization on the proxy server, simply do not specify these parameters when starting the container.

โ Compose

You can download and use the docker-composeโ  file to build the container from Docker Hub:

curl -sO https://raw.githubusercontent.com/Lifailon/TorAPI/main/docker-compose.yml
curl -sO https://raw.githubusercontent.com/Lifailon/TorAPI/main/.env.yml

Edit the environment variables in the .envโ  file (required if using a proxy server) and start the container:

docker-compose up -d
โ Local image

You can save an image downloaded from Docker Hub to transfer it to a machine that does not have Docker Hub access:

docker save -o TorAPI-Docker-Image.tar lifailon/torapi

In the release filesโ  you can download the prepared image and boot it on your machine:

docker load -i TorAPI-Docker-Image.tar

Run the container from the downloaded local image:

docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped lifailon/torapi:latest
โ Dockerfile

You can build the image yourself from the project's source files using dockerfileโ .

Clone this repository:

git clone https://github.com/Lifailon/TorAPI
cd TorAPI

Edit variables or other settings in the dockerfile if necessary:

ENV PROXY_ADDRESS="192.168.3.100"
ENV PROXY_PORT="9090"
ENV USERNAME="TorAPI"
ENV PASSWORD="TorAPI"

Build the image and run the container:

docker build -t torapi .
docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped torapi

โ ๐Ÿ“ฆ Install

To install the project and all dependencies, you can use the package manager npmโ :

npm install -g torapi

โ ๐Ÿ”จ Build

Clone the repository, install dependencies and start the server:

git clone https://github.com/Lifailon/TorAPI
cd TorAPI
npm install
npm start

By default, the server will be launched on port 8443.

You can specify a different port:

npm start -- --port 2024

For development, use nodemon mode (restarts the server when the contents of files change):

npm run dev
โ Proxy

Use a proxy for all requests:

npm start -- --port 2024 --proxyAddress 192.168.3.100 --proxyPort 9090

If authorization on a proxy server is required:

npm start -- --port 2024 --proxyAddress 192.168.3.100 --proxyPort 9090 --username TorAPI --password TorAPI
โ OpenAPI

๐Ÿ“š Documentation is available in the Swagger UI at: http://localhost:8443/docs via module swagger-ui-expressโ . The documentation is described through the swagger-jsdocโ  library.

To create up-to-date or update Swagger documentation files in JSON and YAML format, use the command:

npm run docs

โ ๐Ÿงช Tests

You can run testing to quickly check the health of all endpoints in the console:

npm start -- --test

During testing, the local server is started, a request is made to the endpoint /api/provider/test, the output is logged in JSON format and the server exits.

Change header parameter in request:

npm start -- --test --q "The Rookie"

Parameterized tests are also available through GitHub Actionsโ  using Postmanโ  via newmanโ  in JUnit format:

To run tests locally:

npm install -g newman

newman run postman-tests.json \
    --iteration-count 1 \
    --env-var "baseUrl=http://localhost:8443" \
    --env-var "query=The Rookie" \
    --env-var "queryAllPage=test" \
    --env-var "categoryRuTracker=1605" \
    --env-var "categoryKinozal=20" \
    --env-var "categoryRuTor=10" \
    --env-var "categoryNoNameClub=1318"
...
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         โ”‚           executed โ”‚            failed โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚              iterations โ”‚                  1 โ”‚                 0 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                requests โ”‚                 45 โ”‚                 0 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚            test-scripts โ”‚                167 โ”‚                 0 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      prerequest-scripts โ”‚                154 โ”‚                 0 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚              assertions โ”‚                169 โ”‚                 0 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ total run duration: 32s                                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ total data received: 1.95MB (approx)                             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ average response time: 663ms [min: 2ms, max: 6.1s, s.d.: 1216ms] โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ Other projects:

  • ๐Ÿ”Ž LibreKinopoiskโ  - Google Chrome extension that adds buttons to the Kinopoisk website and provides a TorAPI interface in the Jackettโ  style (without the need to install a server part and use a VPN) for quickly searching for movies and series in open sources.

  • ๐Ÿงฒ Kinozal botโ  - Telegram bot that allows you to automate the process of delivering content to your TV using only your phone. Provides a convenient interface for interacting with the torrent tracker Kinozalโ  and the database TMDBโ  to track the release date of episodes, seasons and search for actors for each episode , as well as the ability to manage the torrent client qBittorrentโ  or Transmissionโ  on your computer, being remote from home and from single interface.

  • โค๏ธ WebTorrent Desktop apiโ  - fork of the WebTorrent Desktopโ  client, which added a remote control mechanism via the REST API based on Express Frameworkโ .

  • ๐Ÿ“ก Reverse Proxy .NETโ  - cross-platform command-line utility for implementing a .NET based reverse proxy server. It is used to provide access to hosts on the network from one network interface to remote applications via TCP, UDP or HTTP/HTTPS protocols (GET and POST requests are supported to access external resources over the Internet) available via another network interface (e.g. via VPN) on your host without unnecessary configuration and with authorization support.

Tag summary

Content type

Image

Digest

sha256:9b7fa74f0โ€ฆ

Size

63.5 MB

Last updated

about 1 year ago

docker pull lifailon/torapi