Утилита для скачивания данных по ссылкам, которые можно получить из архива аккаунта VKontakte.
- VKArchiveDownloader
- 1. Описание работы
- 2. Результат работы
- 3. Использование утилиты
- 4. Вопросы и ответы
- 4.1 Почему нет поддержки скачивания видео?
- 4.2 Почему в папке сообщений или в папке документов начали появляется скачивания по пути
*/text/html
без разрешения файла? - 4.3 Почему в логах начали часто появляется ошибки, связанные с
asyncio.TimeoutError
? - 4.4 Почему выдается ошибка, подобная
PermissionError: [Errno 13] Permission denied: '.../Cookies'
? - 4.5 Фактически, доступ к сжатым фото и голосовым сообщениям может получить любой человек, у которого на них есть ссылка?
- 4.6 Как работает скачивание по ссылкам (для любопытных)?
- 4.7 Чем опасно отключение проверки SSL сертификата? (флаг
disable_ssl
)
- 5. Тесты производительности
С помощью данной утилиты возможно скачать данные по ссылкам, которые, так или иначе разбросаны по архиву 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
;
- Ссылки, связанные с VKontakte:
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
файлов некоторых браузеров. Это может понадобится для скачивания контента, для которого необходима авторизация на сайте VKontakte.
Пример таких данных (сложно перечислить их всех, проще сказать, что все, кроме сжатых фото и голосовых сообщений):
- Бинарные данные (
.doc
,.docx
,.pdf
, etc); ZIP
архивы;- Текстовые файлы (
.txt
,.ini
,.py
, etc); - Фото, которые были отправлены документом, чтобы избежать сжатия;
- etc.
Поддерживается множество популярных браузеров и ОС. Их список можно найти на
странице используемого для этого модуля browser_cookie3
.
Для того, что утилита могла использовать такие Сookie
файлы, достаточно авторизоваться в учетной записи VKontakte, для которой был сформирован архив
используя браузер, который поддерживается со стороны browser_cookie3
.
⚠️ Сookie
файлы аккаунта будут использованы исключительно для доступа к ресурсам VKontakte и не будут переданы на сторонние ресурсы.
Работа утилиты может быть настроена в конфигурационном файле 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
⚠️ Для данного способа не требуется установка Python. Замечено, что в таком режиме утилита работает, примерно, на 15% медленнее.
Необходимо скачать последний собранный релиз VKArchiveDownloader_win64.zip
и распаковать архив с ним в любую удобную папку.
После этого необходимо поместить директорию архива VKontakte Archive
в директорию распакованной утилиты. Сделайте это любым удобным для вас способом.
После всех шагов подготовки запустите VKArchiveDownloader.exe
любым удобным способом.
Есть несколько причин, по которым это не реализовано:
- Странное поведения доступа к ссылке на само видео. Не ясно почему, но я не всегда могу получить ссылку на исходник видео в максимальном качестве.
- Скачивание займет много времени и займет большое пространство на постоянном носителе. Время - не самый критичный параметр. Но размер самого видео - уже более весомый аргумент, учитывая, что не все видео, в итоге, будут нужны после скачивания.
Как альтернативу данному вопросу, после работы утилиты, в JSON файле с ссылками будет отдельная категория vk_video
со всеми ссылками на видео VKontakte.
4.2 Почему в папке сообщений или в папке документов начали появляется скачивания по пути */text/html
без разрешения файла?
Это не решенная проблема. В папках лежат html
страницы, которые VKontakte отдает на попытку скачать какой-либо документ.
В этот момент утилита сталкивается с ошибкой 429 Too Many Requests,
которая появляется, если в день было слишком много попыток скачать документы.
Пока что, решением данной проблемы является время - нужно подождать 1-2 дня.
Проблема появится, если запускать утилиту за один день множество раз, например, с разными настройками.
Стоит помнить о таком поведении VKontakte.
Также данная проблема может встретится, если а архиве содержится безумно много ссылок на документы в случае, если, например, аккаунт был довольно активным в использовании.
Выходом из такой ситуации может стать разделение скачиваемого контента по дням.
Например, в 1 день в config.ini
оставить только настройку с сообщениями и запустить утилиту, а в следующий день выбрать другую категорию.
Для скачивания файлов в утилите заложен таймаут в 15 минут. Если за это время файл не будет скачан, скачивание оборвется с ошибкой asyncio.TimeoutError
в лог-файле.
Что бы решить данную проблему, стоит уменьшить количество одновременных скачиваний в настройке semaphore_small
и semaphore_big
конфигурационного файла config.ini
.
Для удобства, все ссылки, которые быль обработаны и для них была получена ошибка тайм-аута, будут собраны в отдельную группу данных timeout_error
в файле links_info.json
.
Она возникает, если Google Chrome или браузер, основанный на его движке, открыт во время работы скрипта.
Как вариант решения проблемы, можно закрыть браузер перед началом работы скрипта.
После появления строчки в логах В работе утилиты будут использованы файлы 🍪
браузер можно будет снова открыть.
Ошибка не возникает, если не используются cookie.
Подробнее об этой проблеме и путях ее решения можно прочитать в соответствующем Issue.
4.5 Фактически, доступ к сжатым фото и голосовым сообщениям может получить любой человек, у которого на них есть ссылка?
Да. Для доступа к такому контенту не нужны никакие механизмы авторизации. Если ссылка (или группа ссылок) попадет к другому человеку, он без каких либо сложностей сможет получить файл, на который эта ссылка ссылается. Так что осторожнее с этим интересным решением ребят из VKontakte. Все, что попадает в интернет, остается там на всегда.
Пример такой ссылки, которая была взята из моего случайного диалога.
После нахождения всех ссылок в архиве VKontakte, их можно разделить на три основных категории:
- Ссылки, связанные с VKontakte;
- Ссылки, связанные с серверами VKontakte;
- Ссылки, связанные с другими ресурсами.
Скачивание файлов выполняется только для 1 и 2 категории.
-
Ссылки 2 категории - чаще всего, это ссылки, которые сразу можно найти в сообщениях, в архиве. Это прямые ссылки на файл, которые хранятся в каком-то из серверов VKontakte. Выглядят они, примерно, так:
https://sun9-**.userapi.com/<ссылка_на_файл>
, где**
- некоторое число от 1 до 99;https://psv4.userapi.com/<ссылка_на_файл>
.
-
Ссылки 1 категории - либо ссылки на какой-либо документ, либо ссылка на фото с предпросмотром в интерфейсе VKontakte (с лайками, комментариями и так далее). В этом случае, что бы получить файл, необходимо быть авторизованным на сайте, утилита это делает через файлы
Сookie
от используемого браузера. Если такая авторизация присутствует, вhtml
коде страницы, на которую вела ссылка, можно найти ссылку с редиректом на ссылку 2 категории.
⚠️ Хотя данная опция может помочь в случаях, когда существуют проблемы с сертификатом VKontakte, лучше найти причину, по которой скрипт не может с ним работать.
Отключение проверки SSL сертификата представляет собой значительный риск безопасности и может привести к серьёзным последствиям. Вот несколько ключевых аспектов, которые стоит учесть:
- Подверженность атакам "man-in-the-middle" (MitM): При отключении проверки SSL сертификата, ваше приложение не может убедиться в идентичности сервера, к которому оно подключается. Это дает злоумышленникам возможность перехватывать и модифицировать передаваемые данные, такие как личная информация, учетные данные и финансовая информация;
- Утечка конфиденциальной информации: Без верификации сертификатов нет гарантий, что соединение защищено от несанкционированного доступа третьих лиц. Это может привести к утечке важной конфиденциальной информации.
- Риск повреждения данных и атак: В отсутствие защиты SSL/TLS злоумышленники могут не только просматривать, но и изменять данные во время их передачи. Это может привести как к искажению информации, так и к внедрению вредоносного кода в вашу систему.
Здесь приведены тесты производительности выполнения утилиты на разных платформах и с разными конфигурациями. Все запуски выполнены на максимально возможном количестве потоков, если не указано иное.
ЦП или 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 сек. |