LoginSignup
16
16

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-06-21

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

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16