先日、長年溜まっているSkypeのログを最初から見たくなったので、その時のやり方を。最終的にはブラウザにてLINE風デザインで閲覧できるようにしました。基本的にはMacでの作業ですが、Windowsのフリーソフトを使ったり、抽出したXMLをPHPで表示するので難易度はやや高めかもです。
SkypeのログをXMLで出力
私が見たいログはWindows版Skypeだったので、フリーソフトの『SkypeLogView』でXML抽出できた。Macで同等のソフトがあるかは知らないが、Skypeのログはデータベース(Sqlite?)に記録されているので、MacのSkypeデータ(~/Library/Application Support/Skype/ユーザー)のdbをWinにコピーすればSkypeLogViewで処理できそうだけど未検証。
XMLにさえなれば、あとはMacで作業。
Skype Logs Reader/Viewer (.dbb and main.db files)
XMLの構文を修正
できあがったXMLは126Mになった。ちと巨大です。しかも構文エラーで読めません。構文のチェックにはPHPのsimplexml_load_fileか、あるいはChromeにXMLファイルを直接ドラッグで分かります。
XMLには複数のエラーがあるようで、いかんせんファイルが巨大なので安易に修正できない。Macで巨大なテキストファイルを編集するにはTextWranglerというエディタが良かった。126Mでも難なく読めたし置換もバッチリでした。
simplexml_load_fileでXMLが無事に読めるようになったら、あとはPHPで整形するだけ。
Bare Bones Software | TextWrangler
LINEのデザインでログ表示
LINEの画面に慣れているからか個人的には見やすいので、LINE風にログを表示するスクリプトをPHPで作成。エモーティコンとか対応してないけど、ざっと見るには十分です。簡単ですが、よかったらソースをどうぞ。
<?php
$skype_id = 'your skype id';
$logs = simplexml_load_file("skype_log.xml");
foreach ($logs->item as $val) {
if ($val->action_type == 'Chat') {
$o .= "<h2>" . date('Y/m/d G:i:s', strtotime($val->action_time)) . " <small>".$val->user_name."</small></h2>\n";
$last_user = '';
} else if ($val->action_type == 'Chat Message') {
$display_name = '';
if ( strcmp($last_user,$val->user_name) ){
$display_name = $val->display_name;
}
$o .= "<div class=\"row {$val->user_name}\">\n";
if ($val->user_name == $skype_id) {
$o .= "<div class=\"col-xs-2 left\"> </div><div class=\"col-xs-8 center\"><span>{$val->chat_message}</span></div><div class=\"col-xs-2 right\">{$display_name}</div>\n";
} else {
$o .= "<div class=\"col-xs-2 left\">{$display_name}</div><div class=\"col-xs-8 center\"><span>{$val->chat_message}</span></div><div class=\"col-xs-2 right\"> </div>\n";
}
$o .= "</div>\n";
$last_user = $val->user_name;
} else if ($val->action_type == 'Send File') {
$o .= "<h3>{$val->action_type} <small>{$val->user_name} " . date('G:i:s', strtotime($val->action_time)) . " {$val->filename}</small></h3>\n";
} else {
$o .= "<h3>{$val->action_type} <small>{$val->user_name} " . date('G:i:s', strtotime($val->action_time)) . "</small></h3>\n";
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Skype Log</title>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
<style type="text/css">
body{
font-size: large;
background-color: #879dbb;
}
h2{
padding-left: 10px;
font-size: 48px;
font-weight: 700;
color: white;
background-color: #333;
}
h3{
padding-left: 10px;
color: white;
background-color: #333;
}
.row{
margin: 0.1em 0;
}
.left, .right{
color: white;
padding-top: 0.3em;
}
.center {
line-height: 1;
}
.center span{
border-radius: 10px;
display: inline-block;
padding: 0.5em;
background-color: white;
}
.<?= $skype_id ?> .center {
text-align: right;
}
.<?= $skype_id ?> .center span{
background-color: #b2f08a;
}
</style>
</head>
<body role="document">
<div class="container">
<h1>Skype Log</h1>
<?= $o ?>
</div>
</body>
</html>