Когда я собирал свои смешнявки для галереи, взбрело мне в голову посмотреть, что там есть в ВК — вдруг что-то смешное я сделал и отослал через него? Если смотреть все вручную, то так можно и кукухой поехать, поэтому я решил поехать кукухой автоматизированно.

Disclaimer: Длительное чтение историй своих переписок 10-летней давности может привести к необратимым повреждениям психики и к потере кучи времени. Повторять описанное стоит с максимальными мерами предосторожности.

Кому не интересно нудное описание, что есть и чего нет в архиве — листайте до заголовка Ищем информацию

Скачиваем архив с данными

С этим все почти просто. Заходим по ссылке, запрашиваем архив. Есть нюанс: для скачивания понадобится привязка к мобильному устройству и/или к мобильному телефону, так что если вы до сих пор злостный анон, ВК захочет вас послать. Не забудьте в настройках поставить все галочки — по умолчанию они не все установлены.

Мой архив был готов через пару часов после запроса.

Смотрим, что внутри

Первое, что бросается в глаза — очень маленький размер архива, всего 13 мегабайт. Я в ВК 14 лет и в моей жизни был период, когда "вся жизнь там". Очень сомнительно звучит, что "это самый полный архив".

Внутри лежит поганый HTML. С одной стороны ­— удобно для обывателя, но с другой — я ожидал выгрузку в машиночитаемом формате. Те же операторы связи закинут список ваших звонков в CSV. Или телега, которая дает выбор — либо красивую HTML-ку, либо JSON (правда, для индивидуальных чатов — только HTML). Ну ладно, это не самое страшное.

Вишенкой к формату идет кодировка — конечно же, это всеми любимая CP1251. Ну, хоть не KOI8-R, и на том спасибо.

Малый размер объясняется тем, что внутри только текстовая информация. Картинок нет, только ссылки на них. При этом телега честно скачает, если ее попрость, а тут такой опции нет. Получается, что как бэкап этот архив использовать не получится. Истории тоже особо нет, только та информация, которую и без этого архива можно посмотреть на сайте. С некоторыми оговорками ­— см. далее.

Что в итоге есть?

Информация о профиле

Которую и так видно на главной странице. Всякие вузы, интересы, даты рождения, отношения к алкоголю и т.п.

Список друзей

Для каждого друга покажут: текущее имя или DELETED, ссылку на страницу и дату добавления в друзья (текстом). При этом примерно до июня 2009 года текст даты будет "очень давно".

Подарки

Картинка, ссылка на профиль подарившего, дата.

Подписки

Тупо список пабликов с ссылкой на них. Иногда с пометкой "Администратор" или "Владелец".

Черный список

В формате списка друзей, только вместо "очень давно" — "Дата добавления неизвестна". И DELETED может быть не только ссылкой, но и просто текстом. Спасибо, ВК, теперь я знаю, что у меня в черном списке есть

DELETED
Дата добавления неизвестна

Сообщения

Разбиты по диалогам. Только текстовая информация. Даже картинки указаны голой ссылой, а не в <img> теге. Даты, разумеется, только текстом. Часть контента просто заменяется текстом, например, сообщение может содержать только "пересланное сообщение" без ссылки — и решай ребус, что же ты там такого переслал. Особенно если это чат с DELETED. Похожая ситуация с "1 прикреплённое сообщение" и "Запись на стене".

Вы, 17 мая 2018 в 16:39:27
2 прикреплённых сообщения

Возникают также сомнения, что история сообщений действительно вся: скорее всего только то, что и так через интерфейс можно посмотреть. Но проверять уже желания нет. "Этот вопрос оставлен как упражение читателю", как говорится.

Стена

Примерно в том же формате, что и сообщения, но еще есть ссылка на оригинал. Репосты раскрываются, а не показываются дурацкосй строкой вроде "Запись на стене". Однако "Аудиозапись" и "Граффити" — без ссылки. Посты от других людей на стене тоже есть. И даже есть ссылка на комментарии к записи, которые в этом же архиве.

Лайки

5 категорий: Фото, Видео, Стена, Заметки, Товары. В каждой — список ссылок. Тут хотя бы логично, хотя насколько я знаю, даты лайков ВК тоже знает.

Фотографии

Альбомы из профиля и вдобавок фотографии со страницы, со стены, сохраненные и из "фото со мной". Для альбомов есть даты сохранения и обновления. Фотки в таком же формате, как и стена, со ссылкой на комменты. Но зато сама фотка вставлена <img> тегом.

Видео

Загруженные и добавленные. Как фотки (есть превьюшка), есть еще длительность и количество просмотров. Но прямой ссылки на скачивание нет.

Музыка

Список композиций с именем и длительность, без ссылок.

Документы

Список с датой загрузки, названием файла и ссылкой на него в документах. Никаких превью и прямых ссылок на скачивание.

Товары

К сожалению, я не настолько успешен, чтобы иметь свой бизнес в ВК, поэтому у меня тут пусто.

Истории

Aka "сториз". Не умею таких делать, и тут у меня тоже пусто.

Приложения

Список текущих приложений с названием, ссылкой, правами доступа в формате "кучей через запятую" и датой в формате "Дата последнего запуска неизвестна".

Закладки

Нет, не те. Страницы, записи, видео, товары, статьи, ссылки, подкасты. Везде "Данных нет".

История изменений

Для имени, почты и телефонов. У меня там пусто, но вот немного печалит, что мне суют всяких DELETED, когда ВК все это про них знает. Привязки к телефонам по классике: "Привязан номер телефона 1234547". Ишь чего, машиночитаемый формат захотел!

Платежи

Все, чего у меня нет: карты, история платежей, голоса, голоса внутри приложений, подписки, история переводов.

Реклама

Это уже поинтереснее: всего этого не посмотришь на сайте. Ретаргетинг:

Вы попали в 3271 группу ретаргетинга
Кабинет пользователя

Что бы это ни значило.

Интересы
Бизнес
Пользовательский интерес

ИТ (компьютеры и софт)
Пользовательский интерес

Образование
Пользовательский интерес

iPad
Системный сегмент

Firefox
Системный сегмент

Windows 10
Системный сегмент

Android (бюджетные)
Системный сегмент

Друзья именинников — всех, 3 дня
Системный сегмент

Друзья именинников — всех, 7 днeй
Системный сегмент

Друзья именинников — женщин, 3 дня
Сторонний сегмент

Друзья именинников — женщин, 7 дней
Сторонний сегмент

Образование
Пользовательский интерес

Наука и техника
Пользовательский интерес

Общество
Пользовательский интерес

Интересы к "Windows 10" и "Android (бюджетные)" даже натолкнули на мысль, что меня ломанули. Но в целом нормальный список, понимаешь, почему тебе суют рекламу IT-конференций.

В "Кабинетах" и "Часто посещаемых местах" закономерно пусто, но про последние не очень ясно, что они делают в рекламе.

Прочее

"Обращения в Поддержку": только в новую, в старую — нет. Блокировки: когда блокировали вход в страницу и почему. "Сеансы авторизации": только недавние, с именем, User-Agent и IP. "Импортированные контакты": из почты, телефона, Twitter, FB, G+ и ОК — там у меня пусто. "Верификация": для тех, у кого галочка рядом с именем.

Комментарии

Одной большой кучей. Текст, ссылка на оригинал и дата. Комментарии могут быть:

  • к публикациям на вашей стене.
  • к публикациям на чужих стенах, в т.ч. в пабликах. Причем даже если владелец стены их скрыл.
  • комментариями от имени сообщества, если писал от его имени.
  • ВНЕЗАПНО публикациями в пабликах — когда пишешь на стену паблика от своего имени. Почему ВК считает это комментарием — непонятно.

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

Немного удручает, что нет никакой информации о том, что комментируешь, только ссылка. Особенно прикольно, когда есть id стены, профиль удален, из текста непонятно, кому ты это писал — и решай ребус, что это за чел. Иногда помогает гугление (причем гугл может не помнить, а яндекс выдаст результат, но, опять же, не для всех).

Чего в архиве точно нет

Если вы надеялись, что в архиве будет суперполное досье на вас, то у меня для вас печальные новости: ВК явно хранит данных о вас гораздо больше, чем присылает в архиве. Я приведу список того, чего точно нет, но я наверняка о чем-то забыл. А чего-то вообще не знаю.

Обсуждений в группах

Имеются в виду те, которые отдельно от стены.

Постов от имени сообщества

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

Постов на чужих стенах

С учетом того, что записи на стенах пабликов есть ­— очень странно.

Некоторых комментариев

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

Обращений в старую поддержку и баг-репортов

Отчетливо помню, как парочку багов заводил. Баг-репорты, видимо, сгинули вместе со старым баг-трекером, как и обращения в ТП. Второе может быть объяснено тем, что обращение осуществлялось через обсуждения в специальном паблике.

Мнений

Олды помнят, как говорится. Когда-то давно были "мнения", где человеку можно было анонимно написать что-нибудь. Прикольно, правда? Ну это хотя бы можно понять: сейчас такого уже нет, сервак отключили, данные удалили и все это забыли.

Закладок людей

Да, в ВК можно добавлять людей в закладки. У меня там 25 человек, которые не в друзьях. И этого в архиве нет, хотя другие закладки есть.

Немного про безопасность

Все ссылки на фото (даже которые в личке грузили!) являются публично доступными. СЕСУРИТИ. Документы хоть закрыты — но за это ВК уже нагибали. Так что если вы слали нюдсы в личных сообщениях, то не такие уж они и приватные. Хотя вряд ли это вас смутит, если вы шлете дикпики через интернет.

Ищем информацию

Текст

Наконец-то можно приступить к поиску иголки в стоге сена. Начнем с поиска текста. Самый очевидный вариант — это grep, но если вы попробуете что-то поискать, то вас будет ждать облом. Потому что кодировка не та. Чтобы это исправить, поможет iconv, который умеет конвертировать данные между разными кодировками:

grep -Rnia "$(iconv -t CP1251 <<<'привет')" . | iconv -f CP1251

Не забудьте флаг a, который говорит grep, что мы работаем с бинарным форматом, иначе он будет спамить текстом Binary file matches.

Однако и с такой командой есть проблема: несмотря на флаг -i, который нам говорит игнорировать регистр, grep ничего не знает о нашей кодировке и не знает, что 'п' и 'П' — это одна буква. Поэтому спереди надо дописать LC_CTYPE=ru_RU.CP1251.

Стоит также учесть, что всякие знаки препинания в html записаны мнемониками или кодом, поэтому писать их в шаблоне поиска не стоит.

Комментарии мне было удобно читать по обсуждениям. Чтобы выдрать все обсуждения, в которых поучаствовали, выполняем

grep -Raioh 'https://vk.com/wall[^?]*' ../Archive/comments | sort | uniq

Довольно много комментариев будут на вашей стене, лучше отфильтровать по своему id. Повторюсь, что есть скрытые комментарии. Судя по всему, они появились следующим образом: пользователь закрыл комменты к своей стене. По крайней мере, API ВК пишет Access to post comments denied.

Картинки

С поиском по картинкам сами знаете, как обстоят дела, поэтому придется их смотреть своими глазами. Но для этого их надо сначала скачать. Если вы дата сатанист, то все равно в хозяйстве пригодится — какую-нибудь очередную генерилку треша написать, например. У меня в личке было всего полторы тысячи картинок.

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

Включаем grep-магию:

grep -RiohPa "attachment__link' href='\K.*?(?=')" ../Archive/messages | grep 'userapi' | xargs -P 10 -n 1 curl -sO

Что тут происходит? Мы занимаемся запрещенными темными искусствами — парсим HTML с помощью регулярных выражений :) И не простых, а перловых (-P), да еще с positive look-ahead ((?=)) и zero-width look-behind (\K). Флаг -o говорит нам о том, что нас интересует только совпадение, т.е. сама ссылка, которая находится после href в одинарных кавычках. Подробнее про это можно почитать на Unix StackExchange.

Потом выбираем ссылки только на картинки, которые хранятся на серверах ВК. А дальше с помощью xargs в 10 потоков скачиваем все через curl. Подробнее про связку xargs с curl. Клево, но будут потенциальные проблемы, если что-то не получится загрузить. Тогда было бы мудрее записать все в файл, убрав дубликаты (у меня штук 30 было), и потом сверять список скачанного и список из файла.

Если нужны картинки из фоток, то можно немного поменять первую команду:

grep -RiohPa "img src=\"\K.*?(?=\")" ../Archive/photos/

Ссылки

Пришлось добавить вариантов завершения ссылки, т.к. она может быть текстом. А еще в HTML от ВК где-то двойные кавычки используются, а где-то одинарные.

grep -Raioh 'https\?://[^"<'\'']*' ../Archive | grep -v -e 'vk.com/wall' -e 'www.w3.org' -e 'vk.com/id' | sort | uniq > all_links.txt

Второй grep отсеивает лишние результаты: ссылки на стены и профили ВК, строку с ссылкой на стандарт из шапки. Дальше можно анализировать этот список как душе угодно: читать все подряд, искать grepом интересное, удалить к чертям.

Можно посмотреть топ доменов ваших ссылок:

cat all_links.txt | grep -ioP '://\K[^/]*' | sort | uniq -c | sort -n

Но предварительно лучше разобраться с поддоменами, чтобы были более четкие данные. Я особо не парился и писал ручками обрезку домена третьего уровня через sed:

cat all_links.txt | grep -ioP '://\K[^/]*' | sed 's/.*.userapi.com/userapi.com/g' | sed 's/.*.joyreactor.cc/joyreactor.cc/g' | sort | uniq -c | sort -n

Заключение

Я на самом деле хотел только картинки посмотреть. А потом одно посмотрел, другое посмотрел, да и затянуло. Разумеется, в обычных условия я не позволи бы себе столько времени потратить на такую чушь — не повторяйте мою ошибку :). Но, признаюсь, чтение некоторых старых переписок навеяло... воспоминания. Эмоции. Пищу для размышлений и рефлексии. Так что, может быть, эти часы копания в прошлом были потрачены не совсем зря.