Экспорт база данных GMail Offline
Когда на глаза попался топик Скачиваем историю сообщений из GTalk’a себе на компьютер, я, было, возрадовался, но, узрев громоздкость и усилия, прилагаемые для извлечения, решил что игра не стоит свеч.Поэтому решил пойти другим путем, и разобраться в Google Gears \ GMail Offline.
Подготовка
Первым делом, нам надо Поставить Gears
Залогиниваемся в GMail, идём в чаты и помечаем ярлыком (например export) нужные чат-сессии.
Далее, идём в Настройки Gmail Offline, выбираем Включить Gmail Офлайн для этого компьютера, жмём по ссылке Изменить настройки ярлыка и ставим Все напротив ярлыка export (все остальные можно выставить в Нет, чтобы не качать лишнего.
Дальше остаётся Сохранить изменения и подождать пока Gears синхронизирует нужные цепочки с локалхостом.
База
Пройдясь по директориям Firefox, я нашёл хранилище Google Gears.
Cуть такова, что письма и чаты лежат в файле
%username%@%servername%-GoogleMail@%servername%#database
где %servername% — обычно gmail.com, но для сервисов гугл для домена — будет вашим доменом соответственно.
Заметьте: файл может называться и …#database[1] и [2] или вообще без [цифры], так что если чатов нет в одном файле, то надо будет попробовать со всеми (кроме тех, в чьем имени есть -b, -t, -u, это какая-то служебная информация, нас она не интересует)
Сам файл базы данных находится в %GearsDatabaseDir%/mail.google.com/http_80
где _80 может быть также и _443, если используется SSL, а %GearsDatabaseDir% для вашей платформы можно узнать здесь
Как оказалось, база лежит в формате SQLite. Дальше — проще. sqlite3, скаченый с офсайта помогает нам добраться до самой сути GMail Offline.
Выдёргиваем
Для начала проверим, есть ли там сообщения для нужного нам ярлыка:
sqlite3 -line "user@gmail.com-GoogleMail@gmail.com#database" "SELECT l.`Label` as `label`,COUNT(*) as messages FROM `Labels` l, Messages m, MessageLabels ml WHERE ml.`LabelId`=l.`LabelId` AND m.`rowid`=ml.`MessageId` AND l.`Label`='export'"
Получаем:
label = export
messages = 662
Итак, сообщения есть, можно начинать экспортировать.
Создадим заголовок (<html><body>) и «подвал» (</body></html>) будущего HTML файла чатов, и запустим:
sqlite3 -list -separator '\n\n' "user@gmail.com-GoogleMail@gmail.com#database" "SELECT '<h3>'|| datetime(m.`datems`/1000,'unixepoch','+3 hours') || '</h3>' || c.`c1Body` || '<br /><br />' FROM MessagesFT_content c, Messages m, MessageLabels ml, Labels l WHERE ml.`LabelId`=l.`labelId` AND c.`rowid`=ml.`MessageId` AND m.`MessageId`=c.`rowid` AND l.`Label`='export' ORDER BY m.`datems` ASC" > body.html
(+3 hours заменить на ваш часовой пояс)
А теперь осталось только «слить» файлы в один.
Под Windows:
copy /B header.tpl + body.html + footer.tpl history_export.html
(если не ставить /B то под winxp остаётся в конце какой то стрёмный символ. сopy его зачем-то ставит)
Bash:
cat header.tpl >> history_export.html
cat body.html>> history_export.html
cat footer.tpl >> history_export.html
Вот вкратце и всё. Можно ещё воспользоваться html2text, что, учитывая объем оформления (CSS не было использовано!) — по меньшей мере рационально.

