No description
  • Python 95.8%
  • PowerShell 4%
  • Batchfile 0.2%
Find a file
2026-05-27 19:25:08 +03:00
scripts Initial VK userapi downloader with CLI, adapters, and wait-and-download watcher. 2026-05-26 06:51:33 +03:00
src/vk_userapi_downloader Extract downloadable URLs from all attachment types, not only userapi. 2026-05-27 19:25:08 +03:00
tests Extract downloadable URLs from all attachment types, not only userapi. 2026-05-27 19:25:08 +03:00
.gitignore Initial VK userapi downloader with CLI, adapters, and wait-and-download watcher. 2026-05-26 06:51:33 +03:00
config.yaml.example Initial VK userapi downloader with CLI, adapters, and wait-and-download watcher. 2026-05-26 06:51:33 +03:00
pyproject.toml Initial VK userapi downloader with CLI, adapters, and wait-and-download watcher. 2026-05-26 06:51:33 +03:00
README.md Add per-file download progress logging and fix async worker closure. 2026-05-27 19:25:07 +03:00

VK UserAPI Downloader

CLI-инструмент для извлечения и скачивания файлов из дампов диалогов ВКонтакте по userapi.com URL с дедупликацией по URL и SHA-256, шардингом в storage и учётом общих файлов между пользователями.

Установка

pip install -i https://pypi.org/simple -e ".[dev]"

Скопируйте конфиг:

copy config.yaml.example config.yaml

Конфиг

Параметр Описание
database Путь к SQLite
temp_folder Временная папка для загрузок (по умолчанию E:/TEMP)
storage Папка постоянного хранения (шардинг AB/CD/sha256.ext)
max_workers Параллельные загрузки
html_timezone Таймзона HTML-дампов (по умолчанию Europe/Moscow)
request_timeout Таймаут HTTP в секундах
shard_levels Уровни шардинга (2 = AB/CD/)

Использование

Этап 1 — загрузка чатов

vk-userapi-downloader load-chats . --user-id 228677230

--user-id опционален: если не указан, берётся from_id из сообщений с "out": 1.

Этап 2 — извлечение userapi URL

vk-userapi-downloader extract-urls .

Извлекаются URL для peer_id из chats: userapi, vkvideo.ru, vk.com/doc с dl=, video_ext.php, story/link/gift и др. Wall/call пропускаются. Чекпоинты дампов — повторный extract-urls пропускает обработанные файлы (--force для переобработки). При download — лог по каждому файлу: [N/M] Saved / Dedup / Error и размер.

Этап 3 — загрузка файлов

vk-userapi-downloader download

Скачивает записи с downloaded = false. При ошибках 429 и сетевых — retry с backoff 2/4/8 сек (до 3 попыток). Дедуп по SHA-256 под блокировкой БД.

Автозапуск download после extract-urls

Пока в другом окне идёт extract-urls, запустите двойным кликом:

scripts\wait-and-download.bat

Скрипт каждые 30 секунд смотрит count(*) в таблице files. Если число не растёт 20 проверок подряд (~10 минут), автоматически запускает download. Не запускайте параллельно с extract-urls на одной БД — дождитесь, пока extract реально завершится или надолго «замрёт» счётчик.

Форматы дампов

  • JSON — VK API export (peer_id, title, messages[]). Таймзона UTC.
  • HTML — заглушка до появления образца.

База данных

  • chats(user_id, peer_id, name), UNIQUE (user_id, peer_id)
  • files — userapi URL, filename, first_seen, downloaded, error, sha256, mime_type
  • user_sha256 — связь (user_id, sha256) для поиска одинаковых файлов у разных пользователей

Тесты

pytest

Зависимости

На Windows для определения MIME используется python-magic-bin.