> >

アクセス解析 その2

futomi's CGI Cafe 」提供の「高機能アクセス解析CGI (Standard版, Ver.3.7)」を導入する時の2つの問題 を解決する方法です。

予め、「高機能アクセス解析CGI (Standard版, Ver3.7)」をダウンロードし、アーカイブを解凍してください。
修正を加えるファイルは「acc.cgi」です。

解決その1 文字化けの解消
アーカイブに含まれる「jcode.pl」はUTF-8に未対応なため、このCGIをそのまま利用すると文字化けが発生してしまいます。
そこで、「jcode.pl」の代わりに、サーバにインストールされた「Jcode.pm」を使って、アクセス解析CGIをUTF-8対応に改造します。

14行目:
#unless(-e './jcode.pl') {
# &ErrorPrint('jcode.plがありません。');
#}

24行目:
require './jcode.pl';
use Jcode;

465行目:
&jcode::convert(\$decode_str, "sjis");
$decode_str = Jcode->new(\$decode_str)->sjis;

1662行目:
&jcode::convert(\$Title, "sjis");
$Title = Jcode->new(\$Title)->sjis;

解決その2 リクエストリポートの修正
これはiBlogを使ったサイトで起きる問題です。iBlogが出力するエントリーページは、なぜか<title>と</title>の間に改行が入り、タイトルが複数行に分割されてしまいます。この影響でリクエストリポートがうまく機能しません。
次の変更方法は、不完全な対策です。複数行に分割されたタイトルの中から、1行目のみ抽出します。
アクセス解析は人に見せるものじゃないし、タイトルの頭だけでも拾えればまずまずでしょう(と妥協する)。
(正規表現に関してあんまり自信がありません。他にもっといい方法があるかも。)

1652行目:
※全角の'<'と'>'は半角に置き換えます。体裁を整えるために全角スペースを使っています。
変更前:
if( $LineString =~ /<title>([^<]*)<\/title>/i ) {
  $Title = $1;
  $HitFlag = 1;
  last;
}

変更後:
if( $LineString =~ /<title>([^<]*)<\/title>/i ) {
  $Title = $1;
  $HitFlag = 1;
  last;
} elsif ( $LineString =~ /<title>(.*)/i ) {
  $Title = $1;
  $HitFlag = 1;
  last;
}

さて、iblogPatcherを使用している方には朗報です。作者OKAMURA さんが、プラグインCHANGE_CONTENT.pluginを使って、タイトル部分の勝手改行を直す方法をエントリー してくれました。
タイトル部分が複数行に分割される不具合(仕様?)が根本的に解決されますので、上記の修正は不要になります。
でも、iblogPatcher未使用の方のために一方法として残しておきます。

以上で高機能アクセスログCGIの改造終了です。
image
文字化け解消サンプル
一部文字化けが残ってますが、原因不明。(日本語じゃないのかな?)

image
リクエストリポートのサンプル
「Page Has No Title」とあるのは、Google等のキャッシュへのアクセスである場合に、タイトルを取得できないかららしい。


アクセス解析CGIのインストール方法は、付属のマニュアルに丁寧に説明されていますので、簡単に導入できると思います。お試しください。

[このエントリーのURL]
Posted: 2004年 2月 27日 (金) at 07:21 PM | | |