UNPKG

torapi

Version:

Unofficial API (backend) for RuTracker, Kinozal, RuTor and NoNameClub for receiving torrent files and detailed information about distribution by movie title, TV series or id, and also provides RSS news feed for all providers.

286 lines (198 loc) 22.3 kB
<p align="center"> <img src="image/logo-02.png" alt="Image alt"> </p> --- <p align="center"> <a href="https://hub.docker.com/r/lifailon/torapi"><img title="Docker" src="https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white"></a> <a href="https://www.npmjs.com/package/torapi"><img title="NPM" src="https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white"></a> <a href="https://vercel.com/torapi/torapi"><img title="Vercel" src="https://img.shields.io/badge/vercel-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white"></a> <a href="https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI"><img title="Swagger" src="https://img.shields.io/badge/-Swagger-%23Clojure?style=for-the-badge&logo=swagger&logoColor=white"></a> <a href="https://documenter.getpostman.com/view/37302476/2sAXqzYeRj"><img title="Postman" src="https://img.shields.io/badge/Postman-FF6C37?style=for-the-badge&logo=postman&logoColor=white"></a> <a href="https://github.com/Lifailon/TorAPI/actions"><img title="Actions" src="https://img.shields.io/badge/Actions-%230075A8.svg?style=for-the-badge&logo=githubactions&logoColor=white"></a> <br> <br> <a href="https://github.com/Lifailon/TorAPI/actions"><img title="Actions"src="https://img.shields.io/github/actions/workflow/status/Lifailon/TorAPI/cd-docker-hub.yml?logo=GitHub-Actions&label=CD+Docker+Hub"></a> <a href="https://github.com/Lifailon/TorAPI/actions"><img title="Actions"src="https://img.shields.io/github/actions/workflow/status/Lifailon/TorAPI/cd-vercel.yml?logo=Vercel&label=CD+Vercel"></a> <a href="https://github.com/Lifailon/TorAPI/actions"><img title="Actions"src="https://img.shields.io/github/actions/workflow/status/Lifailon/TorAPI/ci-postman-tests.yml?logo=Postman&label=CI+Postman+Tests"></a> <a href="https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI"><img title="Swagger"src="https://img.shields.io/swagger/valid/3.0?specUrl=https%3A%2F%2Fraw.githubusercontent.com%2FLifailon%2FTorAPI%2Fmain%2Fswagger%2Fswagger.yaml&logo=Swagger&label=Swagger"></a> <br> <a href="https://hub.docker.com/r/lifailon/torapi"><img title="Docker"src="https://img.shields.io/docker/image-size/lifailon/torapi?&color=blue&logo=Docker&label=Docker+Image"></a> <a href="https://www.npmjs.com/package/torapi"><img title="GitHub License"src="https://img.shields.io/npm/v/torapi?logo=npm&logoColor=red"></a> </p> <h4 align="center"> <a href="README.md">English</a> | <strong>Русский</strong> </h4> Неофициальный API (**backend**) для торрент трекеров RuTracker, Kinozal, RuTor и NoNameClub. Используется для быстрого и централизованного поиска раздач, получения торрент файлов, магнитных ссылок и подробной информации о раздаче по названию фильма, сериала или идентификатору раздачи, а также предоставляет новостную RSS ленту для всех провайдеров с фильтрацией по категориям. Вы можете воспользоваться публичной и бесплатной версией опубликованной на [Vercel](https://torapi.vercel.app/api/provider/list), а также развернуть его самостоятельно на любом облачной платформе используя **serverless**, или локально с помощью [Docker](https://hub.docker.com/r/lifailon/torapi). Спецификация **OpenAPI** доступна на официальном сайте [Swagger Hub](https://app.swaggerhub.com/apis-docs/Lifailon/TorAPI). Выпущено под лицензией [MIT](https://github.com/Lifailon/TorAPI/blob/rsa/LICENSE). ### Для чего При использовании публичной версии не нужно использовать VPN, так как данный сервис выступает в роле шлюза, что позволяет интегрировать `API` в любой проект без сетевых ограничений, а также использовать новостную `RSS` ленту на мобильных устройствах, например, через [Fluent](https://github.com/yang991178/fluent-reader-lite). Для работы API не требуется токен доступа и авторизация в трекерах. Реализация простого интерфейса (**frontend**) доступна через расширение Google Chrome 🍿 [Libre Kinopoisk](https://github.com/Lifailon/LibreKinopoisk) для одновременного и быстрого поиска раздач во всех доступных торрент-трекерах (в стиле Jackett). Проект вдохновлен ✨ [Torrent-Api-py](https://github.com/Ryuk-me/Torrent-Api-py) (ранее [Torrents-Api](https://github.com/Ryuk-me/Torrents-Api)) для русскоязычных торрент провайдеров. ### Реализовано - Поиск по названию для получения актуальных или всех доступных раздач (со всех доступных страниц) из указанного провайдера (торрент-трекера) или со всех трекеров одновнеременно. Каждая раздача содержит уникальный идентификатор (используется для **поиска по id**), категория (используется для **фильтрации по категории**), краткая информация и ссылка на скачивание торрент-файла. - Получение списка категорий для всех провайдеров и фильтрация поиска по категории. - Поиск по уникальному идентификатору раздачи указанного провайдера для получения дополнительной информации: магнитная ссылка и хэш сумма для прямой загрузки через любой торрент клиент, ссылки на базы даных о кинематографе (Кинопоиска и IMDb) и постеры, подробное описание и содержимое раздачи (список файлов и их размер). - Получение новостных 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* реализована кастомная лента новостей с главной страницы, которые поддерживают фильтрацию по категориям. --- ## 🚀 Deploy Вы можете развернуть свой публичный API в Vercel из [исходного репозитория](https://github.com/Lifailon/TorAPI), просто нажмите кнопку ниже и следуйте инструкциям: [![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 ### Docker Hub Проект использует [GitHub Actions](https://github.com/Lifailon/TorAPI/actions) для сборки контейнера Docker и автоматического тестирования функциональности всех конечных точек. #### Run Загрузите образ и запустите контейнер из [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 ``` Замените содержимое переменных для подключения к Proxy серверу на свои. Если вы не используете авторизацию на прокси сервере, просто не указывайте эти параметры при запуске контейнера. #### 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 ``` ### Local image Вы можете сохранить образ, загруженный из Docker Hub, что бы передать ее на машину, у которой нет доступа к Docker Hub: ```shell docker save -o TorAPI-Docker-Image.tar lifailon/torapi ``` В [файлах к релизу](https://github.com/Lifailon/TorAPI/releases) вы можете скачать подготовленный образ и загрузить его на своей машине: ```shell docker load -i TorAPI-Docker-Image.tar ``` Запустите контейнер из загруженного локального образа: ```shell docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped lifailon/torapi:latest ``` ### Dockerfile Вы можете создать образ самостоятельно из исходных файлов проекта, используя [dockerfile](dockerfile). Клонируйте этот репозиторий: ```shell git clone https://github.com/Lifailon/TorAPI cd TorAPI ``` При необходимости, отредактируйте переменные или другие параметры в `dockerfile`: ```shell ENV PROXY_ADDRESS="192.168.3.100" ENV PROXY_PORT="9090" ENV USERNAME="TorAPI" ENV PASSWORD="TorAPI" ``` Соберите образ и запустите контейнер: ```shell docker build -t torapi . docker run -d --name TorAPI -p 8443:8443 --restart=unless-stopped torapi ``` ## 📦 Установка Для установки проекта и всех зависимостей, вы можете использовать менеджер пакетов [npm](https://www.npmjs.com/package/torapi): ```shell npm install -g torapi ``` ## 🔨 Сборка Клонируйте репозиторий, установите зависимости и запустите сервер: ```shell git clone https://github.com/Lifailon/TorAPI cd TorAPI npm install npm start ``` По умолчанию сервер будет запущен на порту `8443`. Вы можете указать другой порт: ```js npm start -- --port 2024 ``` Для разработки используйте запуск в режиме **nodemon** (перезапускает сервер при изменение содержимого файлов): ``` npm run dev ``` ### Proxy Для использования прокси сервера для всех запросов: ```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 ``` ### OpenAPI 📚 Документация доступна в **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 ``` ## 🧪 Тесты Вы можете запустить тестирование, чтобы быстро проверить работоспособность всех конечных точек в консоли: ```shell npm start -- --test ``` Во время тестирования запускается локальный сервер, делается запрос к конечной точке `/api/provider/test`, логирует вывод в формате JSON и завершает свою работу. Изменение параметра заголовка в запросе: ```shell npm start -- --test --q "The Rookie" ``` Также доступны параметризированные тесты через [GitHub Actions](/.github/workflows/ci-postman-tests.yml) с использованием [Postman](/postman-tests.json) через [newman](https://github.com/postmanlabs/newman) в формате `JUnit`. Для локального запуска тестов: ```shell 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] │ └──────────────────────────────────────────────────────────────────┘ ``` --- ## Другие проекты: - 🔎 [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) на вашем компьютере, находясь удаленно от дома и из единого интерфейса. - ❤️ [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). - 📡 [Reverse Proxy .NET](https://github.com/Lifailon/rpnet/blob/main/README_RU.md) - кроссплатформенная утилита командной строки для реализации обратного прокси-сервер на базе **.NET**. Используется для предоставления доступа хостам в сети с одного сетевого интерфейса к удаленным приложениям через протоколы **TCP**, **UDP** или **HTTP/HTTPS** (поддерживаются `GET` и `POST` запросы для доступа к внешним ресурсам через Интернет) доступных через другой сетевой интерфейс (например, через **VPN**) на вашем хосте без лишних настроек и с поддержкой авторизации.