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|こばぼっと
......
トピック一覧
いわゆる「窓」一覧は「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 が発表されてしまったが他意は無い。