# TorrAPI (Поиск на трекерах) GenAudioBookInfo использует [TorrServer](https://github.com/YouROK/TorrServer) / TorrAPI-совместимый сервер для поиска аудиокниг на торрент-трекерах и получения метаданных раздач. --- ## Что такое TorrAPI TorrServer — локальный сервис, который предоставляет JSON API для поиска по популярным торрент-трекерам: - **Rutracker** — крупнейший русскоязычный трекер - **Rutor** — популярный трекер - **Kinozal** — кино и аудиокниги - И другие трекеры в зависимости от конфигурации TorrServer --- ## Установка TorrServer TorrServer распространяется отдельно. Скачать: [github.com/YouROK/TorrServer/releases](https://github.com/YouROK/TorrServer/releases) ```bash # Linux/macOS ./TorrServer -port 9200 # Windows TorrServer.exe -port 9200 ``` После запуска TorrServer доступен на `http://localhost:9200`. --- ## Настройка в `config.yaml` ```yaml torrapi: url: http://localhost:9200 # Адрес TorrAPI сервера ``` Можно переопределить флагом: ```bash ./genaudiobookinfo -api http://192.168.1.10:9200 D:\Audiobooks ``` --- ## Как выполняется поиск ### Алгоритм поиска одной книги ``` 1. Попытаться найти по title (названию из тегов / имени папки) 2. Если результатов нет и title ≠ author: попытаться найти по author (автору) 3. Если найдено: взять детали лучшего результата 4. Если не найдено: следующая попытка (до search_retries раз) 5. Если все попытки исчерпаны: переместить в ERROR/ ``` ### Критерий выбора лучшего результата Трекеры ранжируются в порядке приоритета: 1. **Rutracker** (наиболее полные метаданные) 2. **Rutor** 3. **Kinozal** 4. Остальные (по количеству сидов) Из результатов одного трекера выбирается раздача с наибольшим числом сидов. --- ## Ограничение параллелизма Параметр `search_concurrency` (по умолчанию `2`) ограничивает число одновременных HTTP-запросов к TorrAPI через семафор. Это предотвращает перегрузку TorrServer при большом количестве воркеров. ```yaml processing: workers: 6 # воркеров до 6 search_concurrency: 2 # но к TorrAPI ходят только 2 одновременно ``` --- ## Ретраи поиска Если поиск вернул пустой результат или произошла ошибка сети: ```yaml processing: search_retries: 3 # попыток search_retry_delay: 3s # пауза между попытками ``` Это полезно если TorrServer временно перегружен или трекер недоступен. --- ## Получаемые данные После успешного поиска `GetDetail()` возвращает: | Поле | Описание | |---|---| | `Title` | Полное название раздачи (трекерное) | | `Comment` | Описание раздачи (аннотация книги) | | `Year` | Год издания (если указан на трекере) | | `Genre` | Жанр | | `Authors` | Авторы в трекерном формате | | `CoverURL` | URL обложки для скачивания | | `Seeds` | Количество сидов | | `Size` | Размер раздачи | | `TrackerURL` | Ссылка на страницу раздачи | Эти данные записываются в `metadata.json` в секцию `torrent.*`. --- ## Диагностика ### TorrServer недоступен ``` WARN TorrAPI недоступен: dial tcp 127.0.0.1:9200: connection refused ``` Решение: убедиться, что TorrServer запущен на указанном порту. ### Ничего не найдено ``` WARN [Книга] не найдена на трекерах (попытка 1/3) ... ERROR [Книга] перемещена в ERROR/ после 3 попыток ``` Возможные причины: - Нестандартное имя папки (числа, латиница вместо кириллицы) - Книга действительно отсутствует на трекерах - Слишком короткое/общее название ### Проверка вручную ```bash curl "http://localhost:9200/api/v1/search?query=Акунин+Азазель" | jq . ```