# Torrent Tracker Scraper Минимальная утилита для чтения агрегированной статистики одного info hash через UDP BitTorrent tracker protocol (BEP 15). Проект переработан из `_torrent/torrent.py` и `GetPeers.py`: парсинг сайтов, прокси, базы данных, загрузка контента и прочий несвязанный код удалены. Остался только запрос состояния трекера. ## Что делает Программа выполняет два стандартных UDP-запроса к указанному трекеру: 1. `connect` — получает временный connection ID; 2. `scrape` — получает `seeders`, `completed` и `leechers` для одного info hash. Она не скачивает файлы, не отправляет announce, не присоединяется к swarm, не обходит ограничения и не записывает состояние на диск. Ответ зависит от политики конкретного трекера: некоторые отключают scrape или требуют аутентификацию. ## Установка Требуется Python 3.10 или новее. Внешних Python-зависимостей нет. ```bash git clone https://github.dfv24.com/fofanov.dmitry/torrent-tracker-scraper.git cd torrent-tracker-scraper python -m venv .venv . .venv/bin/activate python -m pip install --editable . ``` ## Использование ```bash torrent-tracker-scrape tracker.example.org 6969 \ 0123456789abcdef0123456789abcdef01234567 ``` Параметры: - `host` — DNS-имя или IPv4-адрес UDP-трекера; - `port` — UDP-порт трекера; - `info_hash` — ровно 40 шестнадцатеричных символов; - `--timeout 5` — необязательное время ожидания в секундах, по умолчанию `8`. Успешный ответ имеет вид: ```text seeders=12 completed=340 leechers=4 ``` При недоступности трекера, неожиданном ответе или неверном hash программа завершается с ошибкой. Это намеренно: вызывающий скрипт не должен принять неполные сетевые данные за нулевую статистику. ## Структура и проверка ```text src/torrent_tracker_scraper/ udp.py # реализация пакетов BEP 15 и проверка ответов cli.py # параметры команды и текстовый вывод ``` ```bash python -m compileall -q src PYTHONPATH=src python -c "from torrent_tracker_scraper.udp import scrape; scrape('127.0.0.1', 1, 'bad')" ``` Вторая команда должна завершиться с понятной ошибкой валидации hash до сетевого обращения. ## Использование по назначению Работайте только с трекерами и материалами, к которым у вас есть законный доступ. Проверьте правила трекера до отправки запросов: публичность адреса не означает, что статистику разрешено опрашивать автоматически. ## Лицензия Код распространяется по лицензии [MIT](LICENSE).