понедельник, 13 августа 2018 г.

Skype и его история сообщений

Немногие знают, что у меня постоянно висит в Скайпе диалог  с неким К., которого я уже давно знаю и с которым у меня часто происходят довольно примечательные диалоги. Их иногда довольно здорово, спустя полгода-год перечитать, потому что это уже отпечаток истории, как старый фотоальбом или записки пятилетней давности. Но скроллить мессенджер вверх, чтобы почитать всё в хронологическом порядке неудобно, т.к. там полноценный браузер и он тупит и тормозит из-за бесконечных подгрузок через AJAX. И недавно, я задумался об экспорте истории в удобочитаемый вид.  На поверку оказалось, что самый лучший способ экспортировать полностью историю из Скайпа - это, судя по всему, устроиться в NSA. Почему?  Да потому что, как обычно, развитие продукта отломало всё что можно.

Вот, например, есть ссылка на FAQ.  Вроде бы всё адекватно написано. Но нет: во-первых в новом Skype для Windows 10 экспорт истории найти невозможно. Я искал минут пятнадцать, но его нет.  В других местах, естественно говорят о том, что-де юзайте Skype Classic. Так вот  - там эта кнопка открывает пустое окно. В Skype API этого тоже нет, там вообще кроме interviews и ботов ничего и нет. Шиш вам с маслом, а не история, ишь чего захотели.

Если говорить серьёзно, то  в этом есть какая-то логика: что если я взломал чей-то аккаунт и захотел слить историю? Но тогда какой смысл вообще говорить об экспорте истории, какой смысл вообще в централизованном сервере скайпа? 

Однако, в конечном итоге, историю удалось достать из файла C:\Users\<имя пользователя>\AppData\Roaming\Skype\<имя аккаунта Skype>\main.db .  И то, по сути из-за того, что использовалась старая версия скайпа и там сообщения судя по всему, грузились до бесконечности. В итоге удалось достать сообщения, которые были отправлены 5 лет назад.  А вот, если вы поставили скайп заново хоть какой - то дальше месяца назад по времени не улетите, как бы ни хотелось. По крайней мере, у меня не вышло. 

Изнутри этот файл - тупо БД SQLite3, можно сходу выбрать все нужные сообщения через несложный код вида:

SELECT 
    `id`, 
    `timestamp`, 
    `from_dispname`, 
    `body_xml`  
FROM  Messages 
WHERE 
    `convo_id` = <ID чата в таблице Conversations> 
ORDER BY 
    `timestamp` ASC; 

timestamp здесь - время отправки, from_dispname - имя автора, отображаемое в чате, body_xml - по большому счету HTML сообщения в чате. В принципе, это единственное место, где я был доволен ситуацией, ибо обрабатывай - не хочу, хотя и не секурненько. Также в этой таблице, есть ещё другие флаги и поля, которые хранят важную информацию, но мне пока хватило и этих.

Каких-то особых выводов в этой истории нет и быть не может т.к. всё соответствует трём максимам:
  1. Всё что не сохранено локально в двух экземплярах можно считать удалённым
  2. Всё что хранится в облаке можно считать удалённым.
  3. Единственный хороший мессенджер  - это тот, который вы написали и хостите сами.  По крайней мере, если в нём чего-то не будет - то вы сами виноваты.