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.
- Host: GitHub
- URL: https://github.com/lifailon/torapi
- Owner: Lifailon
- License: mit
- Created: 2024-03-12T15:00:59.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-12T21:59:46.000Z (4 months ago)
- Last Synced: 2025-04-24T01:44:38.545Z (2 months ago)
- Topics: api, api-server, axios, cheerio, express, expressjs, github-actions, javascript, js, nodejs, postman, postman-test, rest-api, rss, rutorrent, rutracker, swagger, torrent, tracker, web
- Language: JavaScript
- Homepage: https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI
- Size: 9.18 MB
- Stars: 38
- Watchers: 3
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
---
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 из исходного кода репозитория. Для этого нажмите кнопку ниже и следуйте инструкциям:
[](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 newmannewman 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).