сервис по поиску фильмов и их закачке через qbittorrent. из клиентов телеграм бот и веб интерфейс
Find a file
vrubelroman a5497eef26 fix(app): исправление скачивания торрентов
- generate_clean_magnet: убраны мёртвые трекеры (coppersurfer.tk, leechers-paradise.org),
  добавлены рабочие (tamersunion.org, exodus.desync.com, moeking.me),
  включено &dn= с URL-кодированием кириллицы
- extract_hash_from_result: новая единая функция извлечения хэша из 5 источников
  (Hash, InfoHash, Magnet, btih: в URL, Id)
- /api/add-torrent: убран ложный success — после Ok. от qBittorrent идёт реальная
  верификация (торрент появился в списке по хэшу или названию). Если не появился — error.
- /api/proxy-torrent-download: новый endpoint для скачивания .torrent файлов
  через NL-прокси (обходит DPI-блокировку)
- torrents.html: кнопка Копировать magnet (Clipboard API + fallback),
  proxy-ссылки для .torrent, disabled-состояния для пустых magnet/torrent_url
- tmdb-proxy: добавлен /proxy-torrent endpoint
- urlencode filter для Jinja2
- test_app.py: 47 тестов на чистые функции
2026-06-03 19:27:14 +00:00
app fix(app): исправление скачивания торрентов 2026-06-03 19:27:14 +00:00
searchFilms fix(app): исправление скачивания торрентов 2026-06-03 19:27:14 +00:00
.gitignore Очистка проекта и улучшение документации 2025-10-09 13:05:28 +03:00
PROJECT_SUMMARY.md refactor: split into two stacks - searchFilms/ (NL) and app/ (RU) 2026-06-03 09:29:09 +00:00
README.md refactor: split into two stacks - searchFilms/ (NL) and app/ (RU) 2026-06-03 09:29:09 +00:00

findFilms — поиск и скачивание фильмов

Двухстековая архитектура: searchFilms/ на NL-хосте (Голландия, без блокировок), app/ на RU-хосте (Россия). Между собой общаются по HTTP через интернет.


Архитектура

searchFilms/ (NL, 72.56.91.135)       internet      app/ (RU, 192.168.8.173)
┌─────────────────────────┐     HTTP      ┌─────────────────────────────┐
│  tmdb-proxy (:8001)     │ ←──────────→ │  movie-search (:8089)       │
│  torapi-search (:8443)  │   поиск      │  telegram-bot               │
│                         │              │  qBittorrent (:8080)        │
└─────────────────────────┘              └─────────────────────────────┘

Поток данных:

  1. Пользователь ищет фильм → movie-search делает запрос к tmdb-proxy (NL)
  2. Пользователь ищет торренты → movie-search делает запрос к torapi-search (NL)
  3. Пользователь добавляет торрент → movie-search отдаёт magnet-ссылку в qBittorrent (локально)

NL-хосту не нужен доступ к RU — только RU ходит к NL.


Быстрый старт

🌍 SearchFilms Stack — на голландском хосте (72.56.91.135)

cd searchFilms
cp .env.example .env        # указать TMDB_API_KEY
docker compose up -d --build

Откроет порты:

  • :8001 — TMDB API Proxy
  • :8443 — TorAPI Search

🏠 App Stack — на хосте в России

cd app
cp .env.example .env        # указать TELEGRAM_BOT_TOKEN
docker compose up -d --build

Откроет:

  • :8089 — веб-интерфейс
  • Telegram бот (ждёт команды /start)

Переменные окружения

Переменная Где Назначение
NL_HOST app/.env IP голландского хоста (по умолч. 72.56.91.135)
TELEGRAM_BOT_TOKEN app/.env Токен бота от @BotFather
TMDB_API_KEY search/.env Ключ TMDB API
QBITTORRENT_USERNAME app/.env Логин qBittorrent
QBITTORRENT_PASSWORD app/.env Пароль qBittorrent

Структура

findFilms/
├── README.md               ← этот файл
├── PROJECT_SUMMARY.md      ← архитектура
├── searchFilms/             ← NL-стек
│   ├── docker-compose.yml
│   ├── .env.example
│   └── tmdb-proxy/         ← build-зависимость
└── app/                    ← RU-стек
    ├── docker-compose.yml
    ├── .env.example
    ├── app.py / telegram_bot.py / templates / Dockerfile / ...