備忘録として簡単にメモ。
Macの場合 "~/Library/Application Support/Skype/(自分のアカウント名)/main.db"
に、SQLiteのデータベースとして保存されている。
バックアップを取る場合は上のファイルをコピーすればOK。
メッセージをクエリするには、sqlite3をインストールし、上のDBの Messages テーブルを対象とすればよい。
Messagesテーブルのスキーマ
.schema で出力してみる。
1 2 3 4 5 6 7 8 |
sqlite> .schema Messages CREATE TABLE "Messages" (id INTEGER NOT NULL PRIMARY KEY, is_permanent INTEGER, convo_id INTEGER, chatname TEXT, author TEXT, from_dispname TEXT, author_was_live INTEGER, guid BLOB, dialog_partner TEXT, timestamp INTEGER, type INTEGER, sending_status INTEGER, option_bits INTEGER, consumption_status INTEGER, edited_by TEXT, edited_timestamp INTEGER, param_key INTEGER, param_value INTEGER, body_xml TEXT, identities TEXT, reason TEXT, leavereason INTEGER, participant_count INTEGER, error_code INTEGER, chatmsg_type INTEGER, chatmsg_status INTEGER, body_is_rawxml INTEGER, oldoptions INTEGER, newoptions INTEGER, newrole INTEGER, pk_id INTEGER, crc INTEGER, remote_id INTEGER, server_id INTEGER, call_guid TEXT, annotation_version INTEGER, timestamp__ms INTEGER, extprop_chatmsg_ft_index_timestamp INTEGER, extprop_chatmsg_is_pending INTEGER, language TEXT, bots_settings TEXT); CREATE INDEX IX_Messages_convo_id_timestamp__ms_consumption_status_sending_status ON Messages (convo_id, timestamp__ms, consumption_status, sending_status); CREATE INDEX IX_Messages_call_guid ON Messages (call_guid); CREATE INDEX IX_Messages_timestamp__ms_chatname ON Messages (timestamp__ms, chatname); CREATE INDEX IX_Messages_timestamp__ms_convo_id_type ON Messages (timestamp__ms, convo_id, type); CREATE INDEX IX_Messages_remote_id ON Messages (remote_id); CREATE INDEX IX_Messages_server_id ON Messages (server_id); |
特定の相手とのメッセージを抽出するには?
海外のスタックオーバーフローで dialog_partner = ‘相手のID’ で抽出すれば良い、とする記事もあるけど・・・
1 2 3 4 |
SELECT convo_id, author, from_dispname, datetime(timestamp, 'unixepoch') as date, body_xml FROM Messages WHERE dialog_partner = '相手のSkypeID' ORDER BY timestamp; |
これを実際にやってみると、Skype上ではちゃんと発言しているのに記録されていない歯抜けのメッセージが出てきたりする。
実際に抽出できていないメッセージを、抽出できたメッセージを比較したところ、どうやら dialog_partner カラムが空文字だったりして、どうも確実ではない様子。
そこで、上のSQLで convo_id というデータを得られるので、それを元に再度SELECTする。
1 2 3 4 |
SELECT convo_id, author, from_dispname, datetime(timestamp, 'unixepoch') as date, body_xml FROM Messages WHERE convo_id = 35311 ORDER BY timestamp; |
これで自分の環境では、相手とのやり取りを漏れなく取得できる。
ファイルにエクスポートするには
1 2 |
cd ~/Library/Application Support/Skype/(自分のアカウント名)/ sqlite3 main.db "SELECT convo_id, author, from_dispname, datetime(timestamp, 'unixepoch') as date, body_xml FROM Messages WHERE convo_id = 35311 ORDER BY timestamp;" > output.log |