2011/07/09

Skypeのログを吸い出す方法

なんかググるといろいろ方法はあるみたい
試したのはsqlite3でmain.dbを開いてSQLを発行する方法
以下の方法はWindows版のみ、Linux版のSkypeはmain.dbがなくて
違う方法で管理しているみたいなのでやり方がよくわからなかったです
こっちも既存のツールでどうにもならなかったらそのうちプログラム書くかも


まずmain.dbの場所は

%USERPROFILE%\AppData\Roaming\Skype\"SKYPEユーザ名"\main.db


SQLiteはCygwinのものを使用しました
テーブル一覧とメッセージを管理しているテーブルのスキーマ

$ sqlite3 -header main.db
SQLite version 3.7.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
Accounts ChatMembers Conversations Participants Voicemails
Alerts Chats DbMeta SMSes
CallMembers ContactGroups LegacyMessages Transfers
Calls Contacts Messages Videos
sqlite> .schema messages
CREATE TABLE Messages (id INTEGER NOT NULL PRIMARY KEY, is_permanent INTEGER, chatname TEXT, timestamp INTEGER, author TEXT, from_dispname TEXT, chatmsg_type INTEGER, identities TEXT, leavereason INTEGER, body_xml TEXT, chatmsg_status INTEGER, body_is_rawxml INTEGER, edited_by TEXT, edited_timestamp INTEGER, newoptions INTEGER, newrole INTEGER, dialog_partner TEXT, oldoptions INTEGER, guid BLOB, convo_id INTEGER, type INTEGER, sending_status INTEGER, param_key INTEGER, param_value INTEGER, reason TEXT, error_code INTEGER, consumption_status INTEGER, author_was_live INTEGER, participant_count INTEGER, pk_id INTEGER, crc INTEGER, remote_id INTEGER, call_guid TEXT, extprop_contact_review_date TEXT, extprop_contact_received_stamp INTEGER, extprop_contact_reviewed INTEGER);
CREATE INDEX IX_Messages_call_guid ON Messages (call_guid);
CREATE INDEX IX_Messages_chatname_timestamp_consumption_status_sending_status ON Messages (chatname, timestamp, consumption_status, sending_status);
CREATE INDEX IX_Messages_convo_id_timestamp_consumption_status_sending_status ON Messages (convo_id, timestamp, consumption_status, sending_status);
CREATE INDEX IX_Messages_remote_id ON Messages (remote_id);
CREATE INDEX IX_Messages_timestamp_chatname ON Messages (timestamp, chatname);
CREATE INDEX IX_Messages_timestamp_convo_id_type ON Messages (timestamp, convo_id, type);
sqlite>


以下でそのユーザの発言と発言したチャット名がわかる

sqlite> select chatname, body_xml from messages where author='skype name';


チャット名がわかったのでそのチャット名で引けばすべての発言が抜き出せます

sqlite> select timestamp, from_dispname, body_xml from messages where chatname='chatname';


結果をファイルに書き出すには以下のようにする

sqlite> .output foobar.txt
sqlite> select xxxx
sqlite> .quit

$ cat foobar.txt

0 件のコメント:

コメントを投稿