SkypeのチャットログのSQLiteをhtml出力する
Skype4のチャットログはC:\Users\ユーザ名\AppData\Roaming\Skype\アカウント名のmain.dbのMessagesテーブルの中に他人の発言も全部あります。*1これをHTML出力したいと思います。
main.dbファイルの調査は、id:Pupさんの"PupSQLite"を使わせてもらいました。テーブルの閲覧にしか使っていませんが、直感的に操作が出来て非常に使いやすく、SQL文のチェックも使えるのでオススメです。
SQL文による抽出結果の表示
準備
今回必要なものをインストール。
DBIx::Simple(v1.32) - ラッパー
ppm install DBIx::Simple
DBIx::XHTML_Table(v1.36) - HTML出力の為
ppm install DBIx::XHTML_Table
ソースコード
#!/usr/bin/perl use DBIx::Simple; use Data::Dumper; use strict; use warnings; my $db = DBIx::Simple->connect('dbi:SQLite:dbname=main.db') || die DBIx::Simple->error; my $result = $db->query('SELECT from_dispname, body_xml, timestamp FROM Messages WHERE author="cherenkov_" AND chatname="#cherenkov_;12846c3d04f0e4fa"') -> html; warn Dumper $result; open(OUT,">skype-log.html") || die; print OUT $result; close(OUT);
skype-log.plで保存。main.dbと同じ場所にしておく。
すぐに試してみたい人は、
- 全ての過去ログから一人の発言を抽出。
my $result = $db->query('SELECT from_dispname, body_xml, timestamp FROM Messages WHERE author="抽出したいアカウント名"') -> html;
- 全ての過去ログを抽出
my $result = $db->query('SELECT from_dispname, body_xml, timestamp FROM Messages') -> html;
ソース解説
結果
生成されたhtmlを開くと、
SQL文で指定した項目の順番でテーブルが作られる。
timestampは後ろに0を3つ付けて、javascript:alert(new Date(1241013723000));すれば読めますね。
不具合
感想
最初にClass::DBI::SQLiteだかDBD-SQLiteを使ったけどうまく動かなかった。
なぜSkypeを調べてたのかというと、ブラウザを全て閉じた状態でSkypeに貼られたリンクをクリックすると、どうやら"既定のブラウザ"が起動するがFirefoxで複数のプロファイルを扱っている場合でもdefaultのプロファイルが起動してしまい、それを避けたかった。レジストリやファイルを見て回ったけどプロファイル指定で起動はできなさそうだった。
関連
*1:ログが増えると別のテーブル、別のファイルになるのかは不明。