Skip to content

Latest commit

 

History

History
286 lines (202 loc) · 22.5 KB

README.md

File metadata and controls

286 lines (202 loc) · 22.5 KB

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

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

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 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 для нагрузочного тестирования:

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

👨‍🔬 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.