сервис по поиску фильмов и их закачке через qbittorrent. из клиентов телеграм бот и веб интерфейс
- Реализован класс DownloadMonitor для мониторинга загрузок в qBittorrent - Добавлена автоматическая аутентификация в qBittorrent API - Система проверяет статус загрузок каждые 30 секунд - Автоматические уведомления при завершении загрузки: * ✅ Успешное завершение с информацией о фильме и торренте * ❌ Уведомления об ошибках загрузки - Интеграция с API: возврат torrent_hash и torrent_name - Отслеживание загрузок по hash с привязкой к пользователю - Фоновый мониторинг через отдельный поток - Уведомления отправляются напрямую в Telegram чат пользователя Технические детали: - Добавлен класс DownloadMonitor в telegram_bot.py - Модифицирован API endpoint /api/add-torrent в app.py - Добавлена поддержка возврата torrent_hash и torrent_name - Реализована система отслеживания активных загрузок - Автоматическое удаление из мониторинга после уведомления Теперь пользователи получают уведомления: 🎉 'Фильм скачался!' - при успешном завершении ❌ 'Ошибка загрузки' - при проблемах с загрузкой |
||
|---|---|---|
| __pycache__ | ||
| node_modules | ||
| templates | ||
| .gitignore | ||
| app.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.telegram | ||
| get_rutracker_cookie.js | ||
| package-lock.json | ||
| package.json | ||
| PROJECT_SUMMARY.md | ||
| README.md | ||
| requirements.txt | ||
| run_telegram_bot.py | ||
| start_all.sh | ||
| telegram_bot.py | ||
| TELEGRAM_BOT_README.md | ||
| test_telegram_bot.py | ||
📚 searchTorrentDownl - Полная документация
🎯 Описание проекта
searchTorrentDownl - это полнофункциональная система для поиска и загрузки фильмов через торренты. Приложение интегрирует поиск фильмов через TMDB API с поиском торрентов на популярных трекерах и автоматическим добавлением в qBittorrent клиент.
🎬 Бизнес-логика:
- Поиск фильмов - пользователь вводит название фильма
- Выбор фильма - из результатов поиска выбирается нужный фильм
- Поиск торрентов - система ищет доступные торренты на всех подключенных трекерах
- Фильтрация и ранжирование - торренты сортируются по качеству, размеру и количеству сидов
- Автоматическое добавление - выбранный торрент автоматически добавляется в qBittorrent
- Загрузка - файлы загружаются в настроенную папку
🔧 Техническая составляющая:
- Frontend: HTML/CSS/JavaScript с адаптивным дизайном
- Backend: FastAPI с асинхронной обработкой запросов
- Поиск фильмов: TMDB API для получения метаданных
- Поиск торрентов: TorAPI для работы с трекерами (RuTracker, Kinozal, RuTor, NoNameClub)
- Клиент: qBittorrent-nox на хосте для загрузки
- Контейнеризация: Docker для изоляции сервисов
- Сеть: Docker networks для связи между компонентами
🏗️ Архитектура системы
Компоненты системы:
- FastAPI приложение (Docker контейнер) - основной веб-сервис
- TorAPI-Search (Docker контейнер) - поиск торрентов по названию
- TorAPI-qBittorrent (Docker контейнер) - получение magnet ссылок по ID
- qBittorrent-nox (хостовая система) - клиент для загрузки торрентов
📋 Технические требования
Системные требования:
- ОС: Linux (Ubuntu/Debian)
- Docker: 20.10+
- Docker Compose: 2.0+
- Python: 3.12+
- RAM: минимум 2GB
- Диск: минимум 10GB свободного места
Зависимости:
- FastAPI 0.115.0
- Uvicorn 0.30.6
- httpx 0.27.2
- BeautifulSoup4 4.12.3
- qBittorrent-nox 4.6.7+
🚀 Установка и настройка
1. Установка qBittorrent на хост
# Установка qBittorrent-nox
sudo apt update
sudo apt install qbittorrent-nox
# Создание пользователя для qBittorrent
sudo useradd -r -s /bin/false qbittorrent
sudo mkdir -p /home/qbittorrent/Downloads
sudo chown -R qbittorrent:qbittorrent /home/qbittorrent
# Создание systemd сервиса
sudo tee /etc/systemd/system/qbittorrent.service > /dev/null <<EOF
[Unit]
Description=qBittorrent Command Line Client
After=network.target
[Service]
Type=forking
User=qbittorrent
Group=qbittorrent
UMask=007
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure
RestartSec=5
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target
EOF
# Включение и запуск сервиса
sudo systemctl enable qbittorrent
sudo systemctl start qbittorrent
2. Настройка qBittorrent
- Откройте браузер: http://localhost:8080
- Войдите с логином
adminи паролемvrubel07 - Настройте параметры:
- Connection: порт 6881, включить UPnP/NAT-PMP
- BitTorrent: включить DHT, PeX, Local Peer Discovery
- Downloads: папка
/home/qbittorrent/Downloads(настроена автоматически)
Важно: Все загруженные файлы сохраняются в /home/qbittorrent/Downloads/
3. Запуск Docker контейнеров
# Клонирование репозитория
git clone <repository-url>
cd searchTorrentDownl
# Создание сети для TorAPI
docker network create torrentvideo_default
# Запуск всех сервисов
docker compose up -d --build
⚙️ Конфигурация
Переменные окружения
Основное приложение (movie-search):
TMDB_API_KEY=6d58225585fb77af5945a964de41849f
TORAPI_URL=http://localhost:8088
TORRENT_SEARCH_URL=http://localhost:8443
TORRENT_ADD_URL=http://localhost:8444
QBITTORRENT_HOST=localhost
QBITTORRENT_PORT=8080
QBITTORRENT_USERNAME=admin
QBITTORRENT_PASSWORD=vrubel07
TorAPI-qBittorrent:
PROXY_ADDRESS=172.17.0.1
PROXY_PORT=8080
USERNAME=admin
PASSWORD=vrubel07
Docker Compose конфигурация
version: '3.8'
services:
movie-search:
build: .
ports:
- "8089:8000"
environment:
- TMDB_API_KEY=6d58225585fb77af5945a964de41849f
- TORAPI_URL=http://localhost:8088
- TORRENT_SEARCH_URL=http://localhost:8443
- TORRENT_ADD_URL=http://localhost:8444
- QBITTORRENT_HOST=localhost
- QBITTORRENT_PORT=8080
- QBITTORRENT_USERNAME=admin
- QBITTORRENT_PASSWORD=vrubel07
networks:
- torrentvideo_default
TorAPI-Search:
image: lifailon/torapi:latest
ports:
- "8443:8443"
networks:
- torrentvideo_default
TorAPI-qBittorrent:
image: lifailon/torapi:latest
ports:
- "8444:8443"
environment:
- PROXY_ADDRESS=172.17.0.1
- PROXY_PORT=8080
- USERNAME=admin
- PASSWORD=vrubel07
networks:
- torrentvideo_default
networks:
torrentvideo_default:
external: true
🔧 API Endpoints
Основное приложение (порт 8089)
Веб-интерфейс:
GET /- главная страница поискаPOST /search- поиск фильмовGET /torrents/{movie_title}- страница с торрентами
API:
GET /api/search/{movie_title}- поиск фильмов через TMDBGET /api/torrents/{movie_title}- поиск торрентовGET /api/torrent/id/{torrent_id}- получение информации о торренте по IDPOST /api/add-torrent- добавление торрента в qBittorrent
TorAPI-Search (порт 8443)
GET /api/search/title/{provider}?q={query}- поиск торрентов по названиюGET /api/provider/list- список доступных провайдеров
TorAPI-qBittorrent (порт 8444)
GET /api/search/id/{provider}?id={torrent_id}- получение magnet ссылки по ID
🎬 Поддерживаемые трекеры
- RuTracker - rutracker.org, rutracker.net, rutracker.nl
- Kinozal - kinozal.tv, kinozal.me, kinozal.guru
- RuTor - rutor.info, rutor.is
- NoNameClub - nnmclub.to
🔄 Алгоритм работы
1. Поиск фильма:
- Пользователь вводит название фильма в веб-форму
- FastAPI приложение обращается к TMDB API с запросом
- Получает список фильмов с метаданными (постер, описание, рейтинг, год)
- Отображает результаты в удобном интерфейсе
2. Поиск торрентов:
- Пользователь выбирает фильм и нажимает "Найти торренты"
- Приложение обращается к TorAPI-Search (порт 8443)
- TorAPI ищет торренты на всех подключенных трекерах:
- RuTracker (rutracker.org, rutracker.net, rutracker.nl)
- Kinozal (kinozal.tv, kinozal.me, kinozal.guru)
- RuTor (rutor.info, rutor.is)
- NoNameClub (nnmclub.to)
- Результаты фильтруются и ранжируются по релевантности, качеству и количеству сидов
3. Добавление торрента:
- Пользователь нажимает "Добавить в клиент" на выбранном торренте
- Приложение получает ID торрента и обращается к TorAPI-qBittorrent (порт 8444)
- TorAPI-qBittorrent получает magnet ссылку по ID торрента
- Приложение генерирует "чистую" magnet ссылку с публичными трекерами
- Через qBittorrent Web API торрент добавляется в клиент
- qBittorrent начинает загрузку в папку
/home/qbittorrent/Downloads
4. Мониторинг загрузки:
- Пользователь может отслеживать прогресс через qBittorrent веб-интерфейс
- Файлы автоматически сохраняются в настроенную папку
- После завершения загрузки файлы готовы к просмотру
🛠️ Устранение неполадок
Проблема: qBittorrent не может добавить торренты
Решение:
- Проверьте настройки qBittorrent (DHT, PeX, LPD включены)
- Убедитесь, что порт 6881 открыт
- Проверьте подключение к интернету
Проблема: TorAPI не может подключиться к трекерам
Решение:
- Проверьте, что трекеры доступны
- Убедитесь, что нет блокировки на уровне роутера/провайдера
- Проверьте логи контейнеров:
docker logs TorAPI-Search
Проблема: Приложение не может подключиться к qBittorrent
Решение:
- Проверьте, что qBittorrent запущен:
sudo systemctl status qbittorrent - Проверьте доступность:
curl http://localhost:8080/api/v2/app/version - Проверьте учетные данные в переменных окружения
📊 Мониторинг
Проверка статуса сервисов:
# qBittorrent
sudo systemctl status qbittorrent
# Docker контейнеры
docker ps
# Логи приложения
docker logs movie-search --tail 50
# Логи TorAPI
docker logs TorAPI-Search --tail 50
docker logs TorAPI-qBittorrent --tail 50
Проверка торрентов в qBittorrent:
curl -s -X POST "http://localhost:8080/api/v2/auth/login" -d "username=admin&password=vrubel07" -c cookies.txt
curl -s -b cookies.txt "http://localhost:8080/api/v2/torrents/info" | jq '.[] | {name: .name, state: .state, progress: .progress}'
🔒 Безопасность
Рекомендации:
- Измените пароли по умолчанию
- Настройте файрвол для ограничения доступа
- Используйте HTTPS в продакшене
- Регулярно обновляйте зависимости
Настройка файрвола:
# Разрешить доступ к веб-интерфейсам
sudo ufw allow 8080/tcp # qBittorrent
sudo ufw allow 8089/tcp # Приложение
sudo ufw allow 6881/tcp # BitTorrent
sudo ufw allow 6881/udp # BitTorrent
📈 Производительность
Оптимизация:
- Настройте лимиты загрузки в qBittorrent
- Используйте SSD для папки загрузок
- Настройте кэширование в браузере
- Мониторьте использование ресурсов
Рекомендуемые настройки qBittorrent:
- Максимальная скорость загрузки: 80% от пропускной способности
- Максимальная скорость отдачи: 20% от пропускной способности
- Максимальное количество активных торрентов: 10-20
- Максимальное количество подключений: 200-500
🆘 Поддержка
При возникновении проблем:
- Проверьте логи всех сервисов
- Убедитесь, что все порты доступны
- Проверьте настройки сети и файрвола
- Создайте issue в репозитории проекта
📁 Структура проекта
searchTorrentDownl/
├── app.py # Основное приложение
├── telegram_bot.py # Telegram бот
├── run_telegram_bot.py # Скрипт запуска бота
├── test_telegram_bot.py # Тестирование бота
├── requirements.txt # Python зависимости
├── Dockerfile # Docker образ основного приложения
├── Dockerfile.telegram # Docker образ Telegram бота
├── docker-compose.yml # Docker Compose конфигурация
├── templates/ # HTML шаблоны
│ ├── index.html # Главная страница
│ ├── results.html # Страница результатов поиска фильмов
│ ├── torrents.html # Страница результатов поиска торрентов
│ └── error.html # Страница ошибок
├── README.md # Основная документация
└── TELEGRAM_BOT_README.md # Документация Telegram бота
🎯 Возможности
- 🔍 Поиск фильмов по названию через TMDB API с полными метаданными
- 🎬 Информация о фильмах - постер, описание, рейтинг, год выпуска, актеры
- 🔗 Поиск торрентов на 4 популярных трекерах одновременно
- 📊 Детальная информация о торрентах - размер, разрешение, качество, количество сидов
- 🚀 Автоматическое добавление торрентов в qBittorrent одним кликом
- 🌐 Веб-интерфейс с удобным поиском и навигацией
- 📱 Адаптивный дизайн для работы на любых устройствах
- 🤖 Telegram Bot - полная функциональность в мессенджере
- 🐳 Контейнеризация для простого развертывания
- 🔌 REST API для интеграции с другими системами
- ⚡ Асинхронная обработка для высокой производительности
- 🛡️ Безопасность - генерация чистых magnet ссылок с публичными трекерами
✅ Статус проекта
🟢 ПРОЕКТ ПОЛНОСТЬЮ ФУНКЦИОНАЛЕН
- ✅ Поиск фильмов работает
- ✅ Поиск торрентов работает
- ✅ Добавление торрентов в qBittorrent работает
- ✅ Загрузка файлов работает
- ✅ Веб-интерфейс работает
- ✅ API работает
- ✅ Telegram Bot работает
- ✅ Все сервисы интегрированы
🚀 Быстрый старт
Запуск с помощью Docker Compose
docker compose up --build -d
Доступ к приложению
- Веб-интерфейс: http://localhost:8089
- qBittorrent: http://localhost:8080 (admin/vrubel07)
- API: http://localhost:8089/api/search/{название_фильма}
- Telegram Bot: @your_bot_username (команда /start)
Версия документации: 1.0
Дата обновления: $(date)
Автор: AI Assistant