PC上のSkypeログをPHPで抽出してみた(2)

↑これの続き

改めて使い方

  • コマンド

$ du --si main.db
668M main.db
$ php skyperead.php
Usage: php skyperead.php
$ php skyperead.php main.db
$

  • 結果

$ ls skypelog/ | wc
487 511 17578
$ wc skypelog/topicmap.txt
431 602 31915 skypelog/topicmap.txt
$ wc skypelog/usermap.txt
718 1187 25773 skypelog/usermap.txt
$ du --si skypelog
501M skypelog

ファイル振り分けルール (各々、.txt の拡張子が付きます)

  • グループチャット (3名以上参加しているチャット)
    • トピックがついている場合はトピックをファイル名に
    • トピックが無い場合は、内部ID をそのままファイル名に (#〜_$〜;〜)
  • プライベートチャット (2名参加しているチャット)
    • 相手のユーザ名をファイル名に
    • 相手のユーザ名が分からない場合は skypeid で (spam とかは多分このパターン)
  • ムードメッセージやファイル転送などは、自分の名前がファイル名
  • usermap.txt に skype名とユーザ名の一覧
  • topicmap.txt に 内部id とトピックの一覧

前回の問題点

色々な条件でメッセージが意図しないファイルに振り分けられる事がありました。

  • 大丈夫なもの
    • トピックのついたグループチャット
    • 相手から話しかけられたプライベートチャット
  • 前回駄目だったもの
    • トピックのついてないグループチャット
    • プライベートチャットで自分から会話を始めたもの
    • コンタクトが送られたけど無視したもの
    • ムードメッセージチャット

改善点

ファイルへの分別がうまく行かないケースを幾つか修正

  • ユーザ名をコンタクトリストからも取るようにしました (ユーザの名寄せがかなり上手くいってる)
    • コンタクトリストにない分も、メッセージのやり取りから取れるものは抽出しました
  • ムードメッセージに対する処理をいれました
  • トピックがついてないグループチャットは、Skypeプロトコルの生の id (chatname とか呼んでる)文字列で保存します。

処理の概要

  • Accounts テーブル
    • 自分の skype名を取得 (後で2人チャットで自分以外は相手のはず。という処理に使う)
  • Chats テーブル
    • ムードメッセージ用にトピックテーブルに自分の skype 名をセット (これは後で見直す)
    • プライベートチャット用にプライベートチャットテーブルに 相手の skype名をセット
    • グループチャット用にトピックテーブルにトピック名をセット
  • Contacts テーブル
    • 表示名テーブルにskype名とユーザ名の対応を入れる
  • Messages
    • 表示用テーブルに会話のメタデータからskype名とユーザ名の対応が取れる分は抽出する (でないと途中でコンタクトから外した人の分で困る事になる)
  • Messages
    • 今まで作ったテーブルを元に、全メッセージをファイルに分別

今後の課題

  • 複数の main.db 対応