Утилита для скачивания всех вложений, которые можно получить из архива аккаунта VKontakte
APACHE-2.0 License
Утилита для скачивания данных по ссылкам, которые можно получить из архива аккаунта VKontakte.
*/text/html
без разрешения файла?asyncio.TimeoutError
?PermissionError: [Errno 13] Permission denied: '.../Cookies'
?disable_ssl
)С помощью данной утилиты возможно скачать данные по ссылкам, которые, так или иначе разбросаны по архиву VKontakte.
Информация о поддерживаемых данных, которые можно скачать:
Тип данных | Поддержка | Сохранение по дате | Примечание | Папка хранения |
---|---|---|---|---|
Сообщения |
✅ | ✅ | Полная поддержка [*], кроме видео | ./output/messages |
Стена |
✅ | ✅ | Все фото со стены скачиваются из photos (Фото ) |
./output/photos |
👍->Фото |
✅ | ❌ | Полная поддержка [*] | ./output/likes/photos |
Фото |
✅ | ✅ | Полная поддержка | ./output/photos |
Файлы |
✅ | ✅ | Полная поддержка [*] | ./output/profile |
Музыка |
❌ | ❌ | В архиве есть только названия песен, но не ссылки | - |
[*] - Если включен доступ к Сookie
файлам.
Результат работы утилиты будет находится в директории output
.
В папке output
, после работы утилиты, будет находится файл links_info.json
. Его содержание зависит от того, какие данные были запрошены в архиве.
Пример links_info.json
, где были запрошены все поддерживаемые типы данных:
{
"messages": {
"id диалога/беседы": {
"name": "Имя диалога/беседы",
"dialog_link": "Ссылка на диалог/беседу",
"Тип данных": ["Ссылки, связные с типом данных"]
}
},
"photos": {
"Имя альбома": {
"Тип данных": ["Ссылки, связные с типом данных"]
}
},
"likes/photo": {
"not_parse": ["Ссылки, связные с типом данных"]
}
}
Для каждой папки из архива, в которой происходит поиск, все ссылки отсортированы по типу контента или их поведения.
Возможные типы разделения ссылок:
content-type
, о котором подробнее можно прочитать тут. Чаще всего, встречаются следующие типы:
image/jpeg
: изображения в формате jpeg
;image/png
: изображения в формате png
;image/gif
: анимационные изображения в формате gif
;video/mp4
: видеофайлы в формате mp4
;audio/ogg
: аудиофайлы в формате ogg
. Обычно, голосовые сообщения;application/octet-stream
: базовый тип бинарных данных. Может быть чем угодно;application/pdf
: файлы PDF
;application/msword
: файлы Microsoft Word, а именно, файлы doc
;application/vnd.openxmlformats
: файлы Microsoft Word, а именно, файлы docx
;application/zip
: ZIP
архивы;application/x-rar-compressed
: RAR
архивы;text/plain
: текстовые файлы txt
;vk_contact
: ссылки на профили людей или сообществ;vk_video
: ссылка на видео;vk_story
: ссылка на истории;vk_club
: ссылки на группы;error
: ссылки VKontakte, переход по котором приводит к ошибке. Например, ошибке отсутствия файла на серверах;not_parse
: ссылки, парсинг которых был неудачен или пропущен;telegram_contact
: ссылки на профили мессенджера Telegram;github_link
: ссылки, связанные с GitHub;aliexpress_link
: ссылки, связанные с AliExpress;pastebin_link
: ссылки, связанные с Pastebin;gdrive_link
: ссылки, связанные с Google Drive;google_link
: ссылки, связанные с Google.com;wikipedia_link
: ссылки, связанные с Wikipedia;🍓
: ссылки, связанные с PornHub;dns_shop_link
: ссылки, связанные с магазином DNS;habr_link
: ссылки на Habr;onedrive_link
: ссылки, связанные с OneDrive;youtube_link
: ссылки, связанные с YouTube.В папке output
, после работы утилиты, будут находится папки с данными, которые удалось получить.
Возможные папки при условии, если присутствуют исходные данные в архиве, можно просмотреть в таблице поддерживаемых типов данных.
В процессе работы утилиты, весь процесс работы логируется и хранится в папке logs
.
Перед использованием утилиты необходимо запросить данные архива на официальной странице VKontakte.
VKontakte дает возможность архивировать разные данные, в зависимости от пожеланий и терпения. Чем больше данных выбрано, тем больше времени будет формироваться архив. Утилита сможет забрать любые поддерживаемые данные, которые найдет, вне зависимости от выбора.
Сookie
файлов браузераУтилита поддерживает использование Сookie
файлов некоторых браузеров. Это может понадобится для скачивания контента, для которого необходима авторизация на сайте VKontakte.
Пример таких данных (сложно перечислить их всех, проще сказать, что все, кроме сжатых фото и голосовых сообщений):
.doc
, .docx
, .pdf
, etc);ZIP
архивы;.txt
, .ini
, .py
, etc);Поддерживается множество популярных браузеров и ОС. Их список можно найти на
странице используемого для этого модуля browser_cookie3
.
Для того, что утилита могла использовать такие Сookie
файлы, достаточно авторизоваться в учетной записи VKontakte, для которой был сформирован архив
используя браузер, который поддерживается со стороны browser_cookie3
.
⚠️
Сookie
файлы аккаунта будут использованы исключительно для доступа к ресурсам VKontakte и не будут переданы на сторонние ресурсы.
config.ini
Работа утилиты может быть настроена в конфигурационном файле config.ini
.
Доступные параметры:
main_parameters
- главные параметры утилиты:
use_coockie=True
- использование Coockie
файлов VKontakte для скачивания документов.
True
- использовать Coockie
файлы, False
- не использовать;
semaphore_small=10
- количество одновременных скачиваний файлов малого размера, таких, как фото.
Если скорость сети оставляет желать лучшего, стоить уменьшить данное значение. 10 одновременных скачиваний отлично работает на 150-200 мбит/c;
semaphore_big=2
- количество одновременных скачиваний файлов большого размера. Например, документы.
Если скорость сети оставляет желать лучшего, стоить уменьшить данное значение 2 одновременных скачиваний отлично работает на 150-200 мбит/c;
core_count=0
- количество потоков для поиска ссылок в архиве.
Если значение равно 0
- автоматическое определение количества используемых потоков;
log_level=INFO
- уровень ведения лог-файла.
INFO
- только сообщения ошибок, предупреждений и информация.
DEBUG
- сообщения ошибок, предупреждений, информации, а также сообщения отладки (для разработчика);
delete_output_folder=False
- нужно ли отчищать содержимое папки результата перед выполнением скрипта.
Удобнее не удалять результаты работы скрипта, если скачивание идет частями.
True
- отчищать, False
- оставить нетронутым.
save_by_date=False
- нужно ли разделять сохраняемые файлы по подпапкам, на основе даты d-m-yyyy
.
Для файлов и альбомов - дата загрузки, для сообщений - дата сообщения.
True
- разделять, False
- оставить обычную логику сохранения.
disable_ssl=False
- отключать ли проверку SSL сертификата. Подробнее об этом описано в Q&A.
Шифрования трафика не будет использоваться, используйте только под вашу ответственность.
Стоит использовать только в безопасной сети и в случаях, когда возникают ошибки вида:
Cannot connect to host [...] certificate verify failed: self signed certificate in certificate chain
folder_parameters
- параметры папок архива.
Если любой из параметров в этой секции будет закомментирован в конфигурационном файле - парсинг папки будет пропущен.
По умолчанию, используются имена папок, которые встречаются в архиве ВК (проверено в 2024 году):
vk_archive_folder=Archive
- имя папки архива VK;
messages_folder=messages
- имя папки сообщений из архива.
profile_folder=profile
- имя папки профиля (документов аккаунта) из архива.
photos_folder=photos
- имя папки фото из архива.
likes_folder=likes/photo
- имя папки лайков и папки лайкнутых фото из архива.
Для запуска утилиты из исходного кода в системе должен быть установлен Python 3.10.5 или выше.
⚠️ Для установки зависимостей в ОС Windows, скорее всего, понадобится Microsoft Visual C++ версии 14.0 или выше.
Необходимо скачать или клонировать репозиторий в удобное для работы место. Предварительно стоит убедиться, установлен ли в системе Git, если будет происходить клонирование репозитория, а не скачивание исходного кода с сайта.
Клонирование репозитория:
git clone https://github.com/DvaMishkiLapa/VKArchiveDownloader.git
В клонированную или скачанную директорию необходимо поместить директорию архива VKontakte Archive
. Сделайте это любым удобным для вас способом.
После клонирования или скачивания репозитория, а также перемещения папки Archive
, необходимо в директории репозитория развернуть виртуальное окружение venv
.
Для ОС Windows необходимо открыть CMD, PowerShell или Windows Terminal в папке репозитория и ввести следующие команды:
py -m venv .venv
.\.venv\Scripts\activate
⚠️ В Windows 10 и выше возможна ошибка, связанная с запретом выполнения скриптов в системе. Тут хорошая статься с описанием и решением этой проблемы.
Для ОС Linux необходимо в папке репозитория ввести следующие команды:
python3 -m venv .venv
source ./.venv/bin/activate
После разворачивания виртуального окружения необходимо установить зависимости:
pip install -r requirements.txt
После всех шагов необходимо запустить утилиту и ждать ее завершения:
python main.py
exe
файл для Windows x64⚠️ Для данного способа не требуется установка Python. Замечено, что в таком режиме утилита работает, примерно, на 15% медленнее.
Необходимо скачать последний собранный релиз VKArchiveDownloader_win64.zip
и распаковать архив с ним в любую удобную папку.
После этого необходимо поместить директорию архива VKontakte Archive
в директорию распакованной утилиты. Сделайте это любым удобным для вас способом.
После всех шагов подготовки запустите VKArchiveDownloader.exe
любым удобным способом.
Есть несколько причин, по которым это не реализовано:
Как альтернативу данному вопросу, после работы утилиты, в JSON файле с ссылками будет отдельная категория vk_video
со всеми ссылками на видео VKontakte.
*/text/html
без разрешения файла?Это не решенная проблема. В папках лежат html
страницы, которые VKontakte отдает на попытку скачать какой-либо документ.
В этот момент утилита сталкивается с ошибкой 429 Too Many Requests,
которая появляется, если в день было слишком много попыток скачать документы.
Пока что, решением данной проблемы является время - нужно подождать 1-2 дня.
Проблема появится, если запускать утилиту за один день множество раз, например, с разными настройками.
Стоит помнить о таком поведении VKontakte.
Также данная проблема может встретится, если а архиве содержится безумно много ссылок на документы в случае, если, например, аккаунт был довольно активным в использовании.
Выходом из такой ситуации может стать разделение скачиваемого контента по дням.
Например, в 1 день в config.ini
оставить только настройку с сообщениями и запустить утилиту, а в следующий день выбрать другую категорию.
asyncio.TimeoutError
?Для скачивания файлов в утилите заложен таймаут в 15 минут. Если за это время файл не будет скачан, скачивание оборвется с ошибкой asyncio.TimeoutError
в лог-файле.
Что бы решить данную проблему, стоит уменьшить количество одновременных скачиваний в настройке semaphore_small
и semaphore_big
конфигурационного файла config.ini
.
Для удобства, все ссылки, которые быль обработаны и для них была получена ошибка тайм-аута, будут собраны в отдельную группу данных timeout_error
в файле links_info.json
.
PermissionError: [Errno 13] Permission denied: '.../Cookies'
?Она возникает, если Google Chrome или браузер, основанный на его движке, открыт во время работы скрипта.
Как вариант решения проблемы, можно закрыть браузер перед началом работы скрипта.
После появления строчки в логах В работе утилиты будут использованы файлы 🍪
браузер можно будет снова открыть.
Ошибка не возникает, если не используются cookie.
Подробнее об этой проблеме и путях ее решения можно прочитать в соответствующем Issue.
Да. Для доступа к такому контенту не нужны никакие механизмы авторизации. Если ссылка (или группа ссылок) попадет к другому человеку, он без каких либо сложностей сможет получить файл, на который эта ссылка ссылается. Так что осторожнее с этим интересным решением ребят из VKontakte. Все, что попадает в интернет, остается там на всегда.
Пример такой ссылки, которая была взята из моего случайного диалога.
После нахождения всех ссылок в архиве VKontakte, их можно разделить на три основных категории:
Скачивание файлов выполняется только для 1 и 2 категории.
Ссылки 2 категории - чаще всего, это ссылки, которые сразу можно найти в сообщениях, в архиве. Это прямые ссылки на файл, которые хранятся в каком-то из серверов VKontakte. Выглядят они, примерно, так:
https://sun9-**.userapi.com/<ссылка_на_файл>
, где **
- некоторое число от 1 до 99;https://psv4.userapi.com/<ссылка_на_файл>
.Ссылки 1 категории - либо ссылки на какой-либо документ, либо ссылка на фото с предпросмотром в интерфейсе
VKontakte (с лайками, комментариями и так далее).
В этом случае, что бы получить файл, необходимо быть авторизованным на сайте, утилита это делает через файлы Сookie
от используемого браузера.
Если такая авторизация присутствует, в html
коде страницы, на которую вела ссылка, можно найти ссылку с редиректом на ссылку 2 категории.
disable_ssl
)⚠️ Хотя данная опция может помочь в случаях, когда существуют проблемы с сертификатом VKontakte, лучше найти причину, по которой скрипт не может с ним работать.
Отключение проверки SSL сертификата представляет собой значительный риск безопасности и может привести к серьёзным последствиям. Вот несколько ключевых аспектов, которые стоит учесть:
Здесь приведены тесты производительности выполнения утилиты на разных платформах и с разными конфигурациями. Все запуски выполнены на максимально возможном количестве потоков, если не указано иное.
ЦП или SoC | Использование 🍪 | ОС | Общее кол-во 🔗 | ⌛ поиска 🔗 | ⌛ скачивания | Общее ⌛ |
---|---|---|---|---|---|---|
Core i7-8565U | Google Chrome | Windows 11 | 15141 | 2 мин. 1 сек. | 8 мин. 10 сек. | 10 мин. 11 сек. |
Core i7-8565U | Vivaldi | Windows 11 + WSL Ubuntu 22.04 | 15141 | 35 сек. | 10 мин. 48 сек. | 11 мин. 24 сек. |
Core i7-8565U | ❌ | Manjaro Linux | 13753 | 25 сек. | 4 мин. 29 сек. | 4 мин. 54 сек. |
Snapdragon 855 | ❌ | Android 12 + Termux | 13753 | 45 сек. | 6 мин. 38 сек. | 7 мин. 23 сек. |
Exynos 4412 | ❌ | Android 9 + Linux Deploy Ubuntu 15.10 | 13753 | 5 мин. 19 сек. | 23 мин. 1 сек. | 28 мин. 20 сек. |
OMAP 3430 890MHz | ❌ | postmarketOS | 3519 | 12 мин. 8 сек. | 29 мин. 5 сек. | 41 мин. 13 сек. |