В файлах, составляющих учетную запись Skype, содержится много полезной информации. Вам просто нужно немного поискать, чтобы найти драгоценные камни. Серверная часть хранилища Skype на самом деле представляет собой просто серию баз данных sqlite, поэтому, немного покопавшись и немного SQL, не так уж сложно добыть эти данные и извлечь любой самородок, который вы ищете. В этом посте мы увидим, как манипулировать базой данных и использовать эти знания для сбора фотографий людей из вашего списка контактов Skype.

Найти базу данных

Данные Skype хранятся в нескольких разных базах данных на диске. Все они хранятся вместе в одном каталоге. В Windows путь будет примерно таким:

C:\Users\USERNAME\AppData\Roaming\Skype\SKYPE_NAME

В основном это базы данных SQLite. В отличие от MySQL или PostgreSQL, SQLite хранит все базы данных в одном файле. База данных и таблицы, которые нам понадобятся для этого упражнения, находятся в файле с именем main.db.

Определите структуру main.db

Посмотрим, как выглядят столы внутри. Откройте инструмент командной строки SQLite, sqlite3. Затем запросите метаданные SQLite, чтобы получить список таблиц в этом файле базы данных.

skype> sqlite3 main.db
      SQLite version 3.8.7.4 2014-12-09 01:34:36
      Enter ".help" for usage hints.
      sqlite> SELECT name FROM sqlite_master WHERE type='table';
            DbMeta
            AppSchemaVersion
            Contacts
            <Many more tables not listed here>

Внешний вид «Контактов» — вероятное место для хранения информации об аватарах. Взгляните на поля, выполнив команду SQLite .schema dot. (Вывод команды был сокращен для ясности.)

sqlite> .schema contacts
CREATE TABLE Contacts (id INTEGER NOT NULL PRIMARY KEY, is_permanent INTEGER, type INTEGER, skypename TEXT, pstnnumber TEXT, aliases TEXT, fullname TEXT, birthday INTEGER, gender INTEGER, languages TEXT, country TEXT, 
   <many more columns>
, avatar_url TEXT, avatar_url_new TEXT, avatar_hiresurl TEXT, avatar_hiresurl_new TEXT,   
   <many more columns>);
CREATE INDEX IX_Contacts_skypename ON Contacts (skypename);
CREATE INDEX IX_Contacts_buddystatus ON Contacts (buddystatus);
CREATE INDEX IX_Contacts_type ON Contacts (type);
CREATE INDEX IX_Contacts_displayname_skypename ON Contacts (displayname COLLATE NOCASE, skypename);

Получить список URL

Ближе к концу списка столбцов находится один, который звучит многообещающе: avatar_url. Значения этого поля можно проверить, выполнив простой SQL-запрос:

SELECT avatar_url FROM contacts WHERE avatar_url != 'None';

В зависимости от вашего списка контактов может быть много URL-адресов. Чтобы вывести список в файл с именем «urllist», сначала выполните небольшой шаг настройки вывода данных в SQLite, а затем повторно запустите запрос.

sqlite> .mode csv
sqlite> .output urllist
sqlite> SELECT avatar_url FROM contacts WHERE avatar_url != 'None';
sqlite>

Получить файлы аватара

Теперь, когда у вас есть список URL-адресов, самый быстрый способ получить файлы — передать выходной файл в wget следующим образом:

wget -i urllist

ПРИМЕЧАНИЕ. В зависимости от того, сколько файлов аватаров существует, вероятно, будет хорошей идеей сначала создать подкаталог для их хранения перед запуском wget.

Очистите имена файлов

Когда wget извлекает файл аватара, он дает ему имя, основанное на URL-адресе, используемом для получения изображения. Имена принимают две формы и выглядят примерно так, как этот список примеров:

a_skype_name@auth_key=22222222
another_skype_name@auth_key=12345678
public 
public.1 
really_yet_another_skype_name@auth_key=234567890

Эти имена не идеальны для работы, но их легко немного почистить с помощью пары строк скрипта bash.

Сначала добавьте расширение «jpg» к общедоступным * файлам:

for f in $(ls pub*) ; do mv ${f} ${f}.jpg ; done

Затем отрежьте «@auth_key=» от других файлов и также дайте им расширение «jpg».

for f in $(ls *@*) ; do mv ${f} $(ls ${f}|cut -d'@' -f1).jpg ; done

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

Хорошей охоты!