- Python 95.8%
- PowerShell 4%
- Batchfile 0.2%
| scripts | ||
| src/vk_userapi_downloader | ||
| tests | ||
| .gitignore | ||
| config.yaml.example | ||
| pyproject.toml | ||
| README.md | ||
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_typeuser_sha256— связь(user_id, sha256)для поиска одинаковых файлов у разных пользователей
Тесты
pytest
Зависимости
На Windows для определения MIME используется python-magic-bin.