An open API service indexing awesome lists of open source software.

https://github.com/lifailon/torapi

Unofficial API (backend) and RSS for RuTracker, Kinozal, RuTor and NoNameClub for receiving torrent files and detailed information about distribution.
https://github.com/lifailon/torapi

api api-server axios cheerio express expressjs github-actions javascript js nodejs postman postman-test rest-api rss rutorrent rutracker swagger torrent tracker web

Last synced: about 2 months ago
JSON representation

Unofficial API (backend) and RSS for RuTracker, Kinozal, RuTor and NoNameClub for receiving torrent files and detailed information about distribution.

Awesome Lists containing this project

README

        


Image alt

---






















English | Русский

Неофициальный `API` (**backend**) для торрент трекеров RuTracker, Kinozal, RuTor и NoNameClub. Используется для быстрого и централизованного поиска раздач, получения торрент файлов, магнитных ссылок и подробной информации о раздаче по названию фильма, сериала или идентификатору раздачи.

Проект вдохновлен ✨ [Torrent-Api-py](https://github.com/Ryuk-me/Torrent-Api-py) (ранее [Torrents-Api](https://github.com/Ryuk-me/Torrents-Api)) для русскоязычных торрент провайдеров.

Вы можете воспользоваться публичной и бесплатной версией опубликованной в [Vercel](https://torapi.vercel.app/api/provider/list), или развернуть его самостоятельно на любом облачной бессерверной платформе (`serverless`), а также локально с помощью [Docker](https://hub.docker.com/r/lifailon/torapi) или менеджера пакетов [NPM](https://www.npmjs.com/package/torapi).

Спецификация **OpenAPI** доступна на официальном сайте [Swagger Hub](https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI).

Выпущено под лицензией [MIT](https://github.com/Lifailon/TorAPI/blob/rsa/LICENSE).

- [💁 Для чего](#-для-чего)
- [🎉 Реализовано](#-реализовано)
- [📋 Список доступных провайдеров](#-список-доступных-провайдеров)
- [⚡ Frontend](#-frontend)
- [Google Chrome Extension](#google-chrome-extension)
- [Wox Plugin](#wox-plugin)
- [🚀 Deploy](#-deploy)
- [🐳 Docker](#-docker)
- [Docker Hub](#docker-hub)
- [Docker Compose](#docker-compose)
- [Dockerfile](#dockerfile)
- [📦 NPM](#-npm)
- [🔨 Build](#-build)
- [📚 Swagger](#-swagger)
- [🧪 Postman](#-postman)
- [👨‍🔬 Jenkins](#-jenkins)
- [🎊 Другие проекты](#-другие-проекты)

## 💁 Для чего

При использовании публичной версии не нужно использовать `VPN` сервисы, так как данный сервер выступает в роле шлюза, что позволяет интегрировать `API` в любой проект без сетевых ограничений, а также использовать новостную `RSS` ленту на мобильных устройствах, например, через [ReadYou](https://github.com/Ashinch/ReadYou) или [Feeder](https://github.com/spacecowboy/Feeder). Для работы API не требуется токен доступа и авторизация в трекерах.

## 🎉 Реализовано

- [X] Поиск по названию для получения актуальных или всех доступных раздач (со всех доступных страниц) из указанного провайдера (торрент-трекера) или со всех трекеров одновнеременно. Каждая раздача содержит уникальный идентификатор (используется для поиска по `id`), категорию (используется для фильтрации по категории), краткая информация и ссылка на скачивание торрент-файла.
- [X] Получение списка категорий для всех провайдеров и фильтрация поиска по категории.
- [X] Поиск по уникальному идентификатору раздачи указанного провайдера для получения дополнительной информации: магнитная ссылка и хэш сумма для прямой загрузки через любой торрент клиент, ссылки на базы даных о кинематографе (Кинопоиск и IMDb), ссылки на постеры, подробное описание и содержимое раздачи (список файлов и их размер).
- [X] Получение новостных `RSS` лент для всех используемых провайдеров с поддержкой фильтрации в форматах `XML`, а также `JSON`.

## 📋 Список доступных провайдеров

| Имя провайдера | Зеркала | Регистрация | Фильтрация для поиска и RSS | Поиск по ID | RSS |
| - | - | - | - | - | - |
| [RuTracker](https://rutracker.org) | 3 | Yes* | Категория | Yes | Native |
| [Kinozal](https://kinozal.tv) | 3 | Yes* | Категория, год выхода, формат | Yes | *Custom* |
| [RuTor](https://rutor.info) | 2 | No | Категория | Yes | *Custom* |
| [NoNameClub](https://nnmclub.to) | 1 | No | Категория | Yes | Native |

**\*** Регистрация требуется только при скачивании торрент-файла по прямой ссылке. Все раздачи при поиске по **id** (идентификатору) содержат **хэш сумму** и **магнитные ссылки** (уже включают в себя актуальный список серверов торрент-трекеров), которые позволяют сразу начать загрузку содержимого раздачи или сгенерировать торрент-файл после загрузки метаданных с помощью любого торрент-клиента, например, [qBittorrent](https://github.com/qbittorrent/qBittorrent) (поддерживает RSS и поисковые плагины), [Transmission](https://github.com/transmission/transmission) или [Webtorrent Desktop](https://github.com/webtorrent/webtorrent-desktop).

Доступ к новостным **RSS** лентам для *RuTracker* и *NoNameClub* осуществляется путем перенаправления оригинального канала. Для провайдеров *Kinozal* и *RuTor* реализована кастомная лента новостей с главной страницы, которые поддерживают фильтрацию по категориям.

## ⚡ Frontend

### Google Chrome Extension

Пользовательский интерфейс для браузера и мобильных устройств в стиле [Jackett](https://github.com/Jackett/Jackett) через расширение 🍿 [Libre Kinopoisk](https://github.com/Lifailon/LibreKinopoisk) для одновременного поиска раздач во всех доступных торрент-трекерах и загрузки контента.

### Wox Plugin

Плагин [Torrent Search](https://github.com/Lifailon/Wox.Plugins) для быстрого поиска раздач во всех доступных торрент-трекерах через интерфейс [Wox](https://github.com/Wox-launcher/Wox), которое доступно для установки из [репозитория плагинов](http://www.wox.one/plugin/431).

## 🚀 Deploy

Вы можете развернуть свой публичный сервер на платформе Vercel из исходного кода репозитория. Для этого нажмите кнопку ниже и следуйте инструкциям:

[![Vercel](https://img.shields.io/badge/Deploy-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white)](https://vercel.com/new/torapi/clone?repository-url=https://github.com/lifailon/TorAPI)

## 🐳 Docker

Проект использует [GitHub Actions](https://github.com/Lifailon/TorAPI/actions) для сборки контейнера Docker и автоматического тестирования функциональности всех конечных точек.

### Docker Hub

Загрузите образ из [Docker Hub](https://hub.docker.com/repository/docker/lifailon/torapi/general) и запустите контейнер:

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

Что бы использовать Proxy сервер, воспользуйтесь следующими параметрами при запуске контейнера:

```shell
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
```

Замените содержимое переменных для подключения к прокси-серверу на свои. Если авторизация не используется, просто не указывайте эти параметры при запуске контейнера.

### Docker Compose

Возможно загрузить и использовать файл [docker-compose](docker-compose.yml) для сборки контейнера из **Docker Hub**:

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

Отредактируйте переменные окружения в файле [env](.env) (если необходимо использовать прокси сервер) и запустите контейнер:

```shell
docker-compose up -d
```

### Dockerfile

Вы можете создать образ самостоятельно из исходных файлов проекта, используя [dockerfile](dockerfile).

Клонируйте репозиторий:

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

Соберите образ и запустите контейнер:

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

## 📦 NPM

Для установки проекта и всех зависимостей, вы можете использовать менеджер пакетов [npm](https://www.npmjs.com/package/torapi):

```shell
npm install -g torapi
```

## 🔨 Build

Для сборки проекта из исходного кода, клонируйте репозиторий, установите зависимости и запустите сервер:

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

По умолчанию сервер будет запущен на порту `8443`.

Вы можете указать другой порт:

```js
npm start -- --port 2024
```

Для разработки используется запуск в режиме [nodemon](https://github.com/remy/nodemon) (перезапускает сервер при изменение содержимого файлов):

```
npm run dev
```

Использование прокси сервера для всех запросов:

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

Авторизация на прокси сервере:

```js
npm start -- --port 2024 --proxyAddress 192.168.3.100 --proxyPort 9090 --username TorAPI --password TorAPI
```

## 📚 Swagger

Документация доступна через **Swagger UI** по адресу `http://localhost:8443/docs` с использованием модуля [swagger-ui-express](https://github.com/scottie1984/swagger-ui-express). Описание документации производится через библиотеку [swagger-jsdoc](https://github.com/Surnet/swagger-jsdoc).

Чтобы создать или обновить файлы документации Swagger в формате `JSON` и `YAML`, используйте команду:

```shell
npm run docs
```

## 🧪 Postman

Вы можете протестировать `API`, чтобы быстро проверить работоспособность всех конечных точек в консоли:

```shell
npm start -- --test
```

Во время тестирования запускается локальный сервер, делается запрос к конечной точке `/api/provider/test`, логирует вывод в формате `JSON` и завершает свою работу.

Изменение параметра заголовка в запросе:

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

Также доступны параметризированные функциональные тесты через [GitHub Actions](/.github/workflows/ci-postman-tests.yml) с использованием [Postman](/test/postman.json) и [Newman](https://github.com/postmanlabs/newman) для формирования отчета в формате `junit` или `html`.

Локальный запуск тестов:

```shell
npm install -g newman

newman run test/postman.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] │
└──────────────────────────────────────────────────────────────────┘
```

Использование [K6](https://github.com/grafana/k6) для нагрузочного тестирования:

```shell
$env:TOR_API_QUERY="The Rookie"
k6 run test/k6.js
```

## 👨‍🔬 Jenkins

Для автоматизации процесса развертвывания, тестирования и управления (запуск, остановка и выгрузка логов) на удаленной машине в локальной среде используется [Jenkins Pipeline](jenkinsfile).

---

## 🎊 Другие проекты

- 🔎 [LibreKinopoisk](https://github.com/Lifailon/LibreKinopoisk) - расширение Google Chrome, которое добавляет кнопки на сайт Кинопоиск и предоставляет интерфейс **TorAPI** в стиле [Jackett](https://github.com/Jackett/Jackett) (без необходимости устанавливать серверную часть и использовать VPN) для быстрого поиска фильмов и сериалов в открытых источниках.

- 🧲 [Kinozal Bot](https://github.com/Lifailon/Kinozal-Bot) - Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон. Предоставляет удобный интерфейс для взаимодействия с торрент трекером [Кинозал](https://kinozal.tv) и базой данных [TMDB](https://www.themoviedb.org) для отслеживания даты выхода серий, сезонов и поиска актеров для каждой серии, а также возможность управлять торрент клиентом [qBittorrent](https://github.com/qbittorrent/qBittorrent) или [Transmission](https://github.com/transmission/transmission) на вашем компьютере, находясь удаленно от дома и из единого интерфейса.

- 📡 [Froxy](https://github.com/Lifailon/froxy/blob/main/README_RU.md) - классический и обратный прокси сервер на базе `.NET` для запуска в режиме командной строки и контейнера [Docker](https://hub.docker.com/r/lifailon/froxy). Поддерживает проксирование `HTTPS` трафика (`CONNECT` запросы) и протокол `SOCKS5` для туннелирования `TCP` трафика, а также `TCP`, `UDP` и `HTTP/HTTPS` протоколы для обратоного проксирования (поддерживается обработка `GET` и `POST` запросов с передачей заголовков и тела запроса для работы с `API` и передачи `cookie`).

- ❤️ [WebTorrent Desktop api](https://github.com/Lifailon/webtorrent-desktop-api) - форк клиента [WebTorrent Desktop](https://github.com/webtorrent/webtorrent-desktop), в котором добавлен механизм удаленного управления через `REST API` на базе [Express Framework](https://github.com/expressjs/express).