Skip to content

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

License

Notifications You must be signed in to change notification settings

Lifailon/TorAPI

Repository files navigation

Image alt





English | Русский

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

Проект вдохновлен ✨ Torrent-Api-py (ранее Torrents-Api) для русскоязычных торрент провайдеров.

Вы можете воспользоваться публичной и бесплатной версией опубликованной в Vercel, или развернуть его самостоятельно на любом облачной бессерверной платформе (serverless), а также локально с помощью Docker или менеджера пакетов NPM.

Спецификация OpenAPI доступна на официальном сайте Swagger Hub.

Выпущено под лицензией MIT.

💁 Для чего

При использовании публичной версии не нужно использовать VPN сервисы, так как данный сервер выступает в роле шлюза, что позволяет интегрировать API в любой проект без сетевых ограничений, а также использовать новостную RSS ленту на мобильных устройствах, например, через ReadYou или Feeder. Для работы API не требуется токен доступа и авторизация в трекерах.

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

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

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

Имя провайдера Зеркала Регистрация Фильтрация для поиска и RSS Поиск по ID RSS
RuTracker 3 Yes* Категория Yes Native
Kinozal 3 Yes* Категория, год выхода, формат Yes Custom
RuTor 2 No Категория Yes Custom
NoNameClub 1 No Категория Yes Native

* Регистрация требуется только при скачивании торрент-файла по прямой ссылке. Все раздачи при поиске по id (идентификатору) содержат хэш сумму и магнитные ссылки (уже включают в себя актуальный список серверов торрент-трекеров), которые позволяют сразу начать загрузку содержимого раздачи или сгенерировать торрент-файл после загрузки метаданных с помощью любого торрент-клиента, например, qBittorrent (поддерживает RSS и поисковые плагины), Transmission или Webtorrent Desktop.

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

⚡ Frontend

Google Chrome Extension

Пользовательский интерфейс для браузера и мобильных устройств в стиле Jackett через расширение 🍿 Libre Kinopoisk для одновременного поиска раздач во всех доступных торрент-трекерах и загрузки контента.

Wox Plugin

Плагин Torrent Search для быстрого поиска раздач во всех доступных торрент-трекерах через интерфейс Wox, которое доступно для установки из репозитория плагинов.

🚀 Deploy

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

Vercel

🐳 Docker

Проект использует GitHub Actions для сборки контейнера Docker и автоматического тестирования функциональности всех конечных точек.

Docker Hub

Загрузите образ из Docker Hub и запустите контейнер:

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

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

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 Hub:

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

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

docker-compose up -d

Dockerfile

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

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

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

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

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

📦 NPM

Для установки проекта и всех зависимостей, вы можете использовать менеджер пакетов npm:

npm install -g torapi

🔨 Build

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

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

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

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

npm start -- --port 2024

Для разработки используется запуск в режиме nodemon (перезапускает сервер при изменение содержимого файлов):

npm run dev

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

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

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

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. Описание документации производится через библиотеку swagger-jsdoc.

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

npm run docs

🧪 Postman

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

npm start -- --test

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

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

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

Также доступны параметризированные тесты через GitHub Actions с использованием Postman и Newman для формирования отчета в формате junit или html.

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

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] │
└──────────────────────────────────────────────────────────────────┘

👨‍🔬 Jenkins

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


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

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

  • 🧲 Kinozal Bot - Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон. Предоставляет удобный интерфейс для взаимодействия с торрент трекером Кинозал и базой данных TMDB для отслеживания даты выхода серий, сезонов и поиска актеров для каждой серии, а также возможность управлять торрент клиентом qBittorrent или Transmission на вашем компьютере, находясь удаленно от дома и из единого интерфейса.

  • 📡 Froxy - классический и обратный прокси сервер на базе .NET для запуска в режиме командной строки и контейнера Docker. Поддерживает проксирование HTTPS трафика (CONNECT запросы) и протокол SOCKS5 для туннелирования TCP трафика, а также TCP, UDP и HTTP/HTTPS протоколы для обратоного проксирования (поддерживается обработка GET и POST запросов с передачей заголовков и тела запроса для работы с API и передачи cookie).

  • ❤️ WebTorrent Desktop api - форк клиента WebTorrent Desktop, в котором добавлен механизм удаленного управления через REST API на базе Express Framework.