Skype の SQLiteファイル main.db の構造

  • 16
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Skype の発言内容を読み取りたい

Skype API 等もあるがもっと高速に読みたい。
Skype が使用しているデータベースファイルの構造を、手当たり次第データを漁ることにより解析した。

main.db を読む

Linux, Mac に Skype をインストールしてあれば、
/home/{Linuxユーザ名}/.Skype/{Skypeユーザ名}/main.db
というファイルができているはず。

このファイルは SQLite のファイルなので、SQLite のコマンドにより中身を読み取ることができる。

SQLite コマンド

インストールされていなければ yum 等でインストールする。

# yum -y install sqlite

sqlite3 コマンドで main.db にアクセスする。

$ sqlite3 /home/Hoge/.Skype/Fuga/main.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> 

テーブル一覧

.table コマンドでテーブル一覧を見ることができる。

sqlite> .table
Accounts          ChatMembers       DbMeta            SMSes
Alerts            Chats             LegacyMessages    Transfers
AppSchemaVersion  ContactGroups     MediaDocuments    VideoMessages
CallMembers       Contacts          Messages          Videos
Calls             Conversations     Participants      Voicemails

コンタクト一覧

sqlite> .schema Contacts
CREATE TABLE Contacts (id INTEGER NOT NULL PRIMARY KEY, ..., skypename TEXT, ..., fullname TEXT, ...);
......
  • skypename … ID
  • fullname … 表示名
sqlite> SELECT skypename, fullname FROM Contacts LIMIT 10;
kobayan-tokyo|k.kobayashi
kobabot|こばぼっと
......

トピック一覧

Image9.png

いわゆる「窓」一覧は「Conversations」テーブルから確認することができる。

sqlite> .schema Conversations
CREATE TABLE Conversations (id INTEGER NOT NULL PRIMARY KEY, ..., identity TEXT, ..., displayname TEXT, ..., last_activity_timestamp INTEGER, ...);
......
  • identity … トピック識別子
  • displayname … 表示名
  • last_activity_timestamp … 最終更新時刻
sqlite> SELECT id, identity, displayname FROM Conversations ORDER BY last_activity_timestamp DESC LIMIT 10;
1212|xxxxxx|窓1
1213|yyyyyy|窓2
1200|zzzzzz|窓3
.......

トピック内発言一覧

sqlite> .schema Messages
CREATE TABLE Messages (id INTEGER NOT NULL PRIMARY KEY, ..., chatname TEXT, ..., from_dispname TEXT, ..., timestamp INTEGER, ..., body_xml TEXT, ...);
....
  • chatname … トピック識別子
  • from_dispname … 発言者
  • timestamp … 発言時刻
  • body_xml … 発言内容

たとえば上述の「窓1」(identity = 'xxxxxx')の発言一覧を取得したければ、

sqlite> SELECT timestamp, from_dispname, body_xml FROM Messages WHERE chatname = 'xxxxxx' ORDER BY timestamp LIMIT 5;
1434871603|kobayashi|hello
1434871611|kobayashi|test
1434871640|kobayashi|testtest
1434871640|kobayashi|こんにちは
1434871641|kobayashi|g

のような感じ。

応用

今回の解析結果を元に、Skype の発言内容をブラウザから閲覧・検索できる qskype というものを作ってみた。これの完成間近に Skype for Web が発表されてしまったが他意は無い。

qskype.png