DvaMishkiLapa / VKArchiveDownloader

Утилита для скачивания всех вложений, которые можно получить из архива аккаунта VKontakte

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Сделать экспорт файлов и ссылок с указанием дат сообщений, в которых была найдена ссылка

Lemonbrush opened this issue · comments

Сейчас скрипт выводит в файл links_info.json все ссылки на все вложения по каждому диалогу вразнобой. В результате получается сплошной список ссылок на все вложения подряд. При такой реализации работа с выходными данными сильно затрудняется

Как сейчас:

"134225462": {
	"name": "DELETED",
	"dialog_link": "https://vk.com/id134225462",
	"error": [
		"https://vk.com/doc134225462_296574017"
	]
}

Как хотелось бы:

"134225462": {
	"name": "DELETED",
	"dialog_link": "https://vk.com/id134225462",
	"error": [{
		"date": "2014-01-01T23:28:56.782Z",
		"link": "https://vk.com/doc134225462_296574017"
	}]
}

При таком решении, в каждом объекте со ссылкой будет лежать дата, которая указана в сообщении с вложением, на которое ведет эта ссылка. Тогда выходные данные будут структурированы, и работа с ними будет максимально понятной и удобной. Это особенно хорошо видно на экспорте данных из очень старых переписок, из которых получается около 20К+ фотографий

@Lemonbrush, я добавил возможность разделения скачиваемых файлов на подпапки, имя которых будет основано на дате. Я посторался проверить все случаи, но у меня не такая внушительная коллекция данных, как у вас. Используйте изменения последнего коммита.

Проверьте, работает ли это у вас. Моя логика немного отличается от вашего.

Спасибо большое за оперативность

Попробовал прогнать скрипт, однако у меня все еще появляются ошибки SSL сертификата на каждую ссылку. Я потратил какое-то время на то, чтобы разобраться как это пофиксить, но, к сожалению, моей экспертизы недостаточно для этого. Поэтому, в итоге я просто сделал мелкий скрипт, который проходится по содержимому info_links.json и скачивает данные по всем ссылкам из error проперти этого файла

Если включить куки, то скрипт выдаст ошибку доступа. Хотя я уже и пароль вводил, и через sudo вызывал

Вижу, что разделение по датам есть, так как в папках появились папки с датами, однако файл info_links.json, куда сливаются все ссылки, которые не удалось скачать, больше не появляется, так что мне не удалось посмотреть результаты скрипта. Если только косвенно, по пустым папкам

Ошибки:
| ERROR | Ошибка 🔗 https://psv4.userapi.com/c628601//u323327289/audiomsg/d2/fa81a0f747.ogg: Cannot connect to host psv4.userapi.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)')]

image
image

@Lemonbrush

Если включить куки, то скрипт выдаст ошибку доступа. Хотя я уже и пароль вводил, и через sudo вызывал

Пользователи bs4 сталкиваются с этой проблемой, особенно с Google Chrome. В послдних версиях этот браузер блокирует доступ к своим куки, если он открыт. Я закрываю его перед началом крипта, после прочтения куки браузер можно снова открыть. Подробнее можно посмотреть тут: #21.

Попробовал прогнать скрипт, однако у меня все еще появляются ошибки SSL сертификата на каждую ссылку

Можете описать свое окружение? OS, версия Python и т.д.
Так же был бы рад, если вы пришлете лог файл, который создается в папке ./logs.

Окей, без проблем. Сегодня вечером отпишу подробнее и приложу файл с логами

Пока могу только сказать, что у скрипт прогоняю на macOS последней версии и гугл хром у меня не запущен

Лог файлы выслал на почту. Один лог файл с запуска с куки, и онин без кук
Python 3.11.1
macOS 14.0 Sonoma

Есть еще вот такая ошибка при обработке профиля
image

Есть еще вот такая ошибка при обработке профиля

Да, я совсем забыл про документы. Они пока без разделения по папкам, релизую позже, проблему исправил.
Пока разбираюсь с проблемой SSL.

Спасибо. Я всегда на связи. Если нужна какая-то помощь, то по мере своих возможностей могу помочь

@Lemonbrush
Я наткнулся на два решения по поводу SSL. Они не совсем новые, но могут помочь. Кажется, проблема заключается в работе OpenSSL Python на MacOS. У меня нет этой системы и мне не на чем проверить данную теорию. Если будете решать проблему данными путями, используйте это с осторожностю. Учитывая нормальное поведение на Windows и Linux, кажется, проблема и правда в MacOS или конфигурации Python на ней.

https://stackoverflow.com/questions/42098126/mac-osx-python-ssl-sslerror-ssl-certificate-verify-failed-certificate-verify
https://stackoverflow.com/questions/40684543/how-to-make-python-use-ca-certificates-from-mac-os-truststore

Хмм, теперь появилась вот такая ошибка

image

Последний коммит?

Убрал обработку профиля, и кажется заработало. Проверяю

@Lemonbrush
Я внес довольно много изменение, которые так же относится и к вашему вопросу.

  • Есть разделение по дате для документов и фотографий из сообщений;
  • Теперь есть поддержка понравившихся фото, но без даты, т.к. ее в архиве нет.

Проверьте, как у вас будет время, не забыв вытянуть последние изиенения.

Все прекрасно работает. Спасибо большое. Этот скрипт сохранил мне как минимум пару лет жизни

@Lemonbrush
Если вам не трудно, проверье у себя проблему старых фотографий.
Я так понимаю, у вас есть фотографии, старше 2012 года. Хотелось бы знать, на сколько это проблема выражена.
Если у вас есть такая же проблема с качеством фотографий, опишите их в топик по ссылке.

Был рад вам помочь :)

Без проблем. Ещё раз прогоню скрипт, уже с последними изменениями, и отпишу по результатам

Это не критично, но было бы удобно если бы папки еще и по годам разбивались, а то сейчас в папках с большими диалогами мешанина. В идеале, чтобы в папках с годом все папки еще и по меcяцам разбивались. Тогда будет более конкретный архив, с которым будет на много удобней работать

image

Наверное проще всего будет просто поменять формат даты на такой - 2023.10.15
Тогда все папки с вложениями будут сами рассортированы по году, месяцу и числу

Еще после скрипта остается очень много пустых папок. Возможно хорошей идеей будет сделать пост обработку директории, в рамках которой будут удаляться все пустые папки

sudo find .../Desktop/VKArchiveDownloader/output/profile/documents -type d -empty -delete

@Lemonbrush
Если это для вас еще актуально, было выпущено обновление, где исправлена проблема создания пустых папок.

Всегда актуально. Спасибо большое