skypeの全チャットログを読みやすい形で保存する(mac)

More than 1 year has passed since last update.

たくさんの思い出が詰まったskypeのメッセージたち。
skypeのアプリ上で昔のメッセージを読み込もうとすると遅いし、
一年前以上のメッセージは読み込んでくれない。
何かあった時のために、読みやすい形でログが残ってあれば…

というわけで抽出方法です。

macの場合、
~/Library/Application Support/Skype/[skypeID]/
の中の
main.db
というデータベースのファイルからデータを抽出する。

skypeLogging.sh
cd ~/Library/Application Support/Skype/[skypeID]/
echo 'select datetime(timestamp,"unixepoch","localtime"), author, body_xml from Messages;' | sqlite3 ./main.db > skype.log

(ファイル名skype.logの部分は適宜変更する。csvにしたら表計算ソフトで読み込めるかも)

dataname(timestamp, "unixepoch","localtime")はタイムスタンプ(整数)のパース。
変換後は (発言時間)|(発言者のskypeid)|(発言者の表示名)|(発言内容) というふうに出力される。

特定のグループチャットのみを抽出したいときは、まず

skypeLogging.sql
select datetime(timestamp,"unixepoch","localtime"), chatname, author, body_xml from Messages ;

chatnameカラムをチェックすると#[グループチャット作成者のskypeID]/$[最初にグループチャットに加えられたメンバーのskypeID];[グループチャットのID(英数字16文字)]というように出力されるので、

skypeLogging.sh
echo 'select datetime(timestamp,"unixepoch","localtime"), author, body_xml from Messages where chatname="#[グループチャット作成者のskypeID]/$[最初にグループチャットに加えられたメンバーのskypeID];[グループチャットのID(英数字16文字)]";' | sqlite3 ./main.db > skype.log

とすればいい。


おまけ
sqlite3 -html とするとhtml形式で出力してる

おまけ2
echo 'select count() from messages;'|sqlite3 main.db
とすれば今までの総発言数(自分の発言+受信メッセージ)が分かる