
NucleusではNP_logプラグインでアクセスログを保存することは出来ますが、それらを統計的に見ることは出来ません。それを見るための解析ソフトとしてBBCloneをインストールしてみました。
BBCloneはPHPで動作するアプリケーションです。画面イメージを左に載せておりますが、http://bbclone.de/demo/でデモ画面が動作しておりますので、それを見て頂いたほうが、どんなものかよく分かるかと思います。
ここでは、そのBBCloneのインストールと、Nucleusでの使用方法をメモとして残しておきます。
BBCloneのインストール
BBCloneのインストールについては、BBCloneでphpアクセス解析を参考にしました。まずhttp://bbclone.de/download.phpとhttp://guitar.jp/MT/archives/000515.phpからBBClone0.4.3とja.phpをダウンロードします。NucleusではUTF-8を使用しておりますので、ja-utf8.phpをjs.phpにリネームしてlanguageフォルダの同名ファイルを入れ替えます。ただし、ja-utf8.phpファイルでのcharsetの定義はeuc-jpのままですので、これを以下のようにutf-8に修正します。(※現在は最初から修正済みです)
// Specific charset
"global_charset" => "utf-8",
"global_charset" => "utf-8",
また、confフォルダの言語設定を以下のように日本語に変更します。
$BBC_LANGUAGE = "ja";
次にbbcloneフォルダごと、ftpでサーバにアップロードします。アップロードするディレクトリはどこでも構いません。私はnucleusのルートディレクトリにアップロードしました。BBCloneはvarディレクトリの中にログを保存しますので、このパーミションを変更します。varディレクトリを'777'に、varディレクトリ中の全ファイル(.htaccessを除く)を'666'に変更します。これでBBCloneが使用可能になります。
BBCloneの解析結果を表示するには、BBCloneをインストールしたディレクトリのindex.phpにアクセスしてください。
NucleusからBBCloneを使用する
BBCloneを使用するには、解析したいページに次のソースを埋め込みます。
<?php
define("_BBC_PAGE_NAME", "my particular page title");
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>
define("_BBC_PAGE_NAME", "my particular page title");
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>
Nucleusでは動的にページを作成しておりますので、わざわざ色々なスキンに埋め込まなくてもnucleusルートのindex.phpでこの命令を実行してやれば、NucleusのどのページにアクセスしてもBBCloneにログが保存されます。
ただしこのままでは全て同一ページとして保存されてしまいますので、次のようにアクセス時のURI名で保存するようにします。
$request = strtolower($_SERVER["REQUEST_URI"]);
define("_BBC_PAGE_NAME", $request);
define("_BBC_PAGE_NAME", $request);
また「URLを静的なものにする」に記入したようにこのNucleusではURIを静的なものに変更しておりますが、プラグインには動的なものがそのまま残っております。そのため、同一ページでも複数のURIのリンクが残っており、このままではそれらが別々のページとしてカウントされてしまいます。そのため、これらをBBCloneでは同一になるように変更します。これは先ほどの投稿のmod_rewriteのルールを参考にして、静的なURIを動的なURIに変更してから保存するようにします。
$request = eregi_replace('^item-([0-9]+).html', 'index.php?itemid=\\1', $request);
これらのことを考慮して、次のようなbbclone.phpファイルをnucleusルートディレクトリに作成します。
<?php
$request = strtolower($_SERVER["REQUEST_URI"]);
// '/nucleus/' の文字は省略する
$st_pos = strlen('/nucleus/');
$len = strlen($request) - $st_pos;
if($len != 0)
$request = substr($request, $st_pos, $len);
else
$request = 'index.php'; // ファイル名省略時は 'index.php' としてカウントする
// 個別アイテムページが静的URLの場合は動的URLとしてカウントする
$request = eregi_replace('^item-([0-9]+).html', 'index.php?itemid=\\1', $request);
// '/nucleus/?item...' のようなパターンも 'index.php?item...' としてカウントする
if($request[0] == '?')
$request = 'index.php' . $request;
// アクセスを登録する
define("_BBC_PAGE_NAME", $request);
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>
$request = strtolower($_SERVER["REQUEST_URI"]);
// '/nucleus/' の文字は省略する
$st_pos = strlen('/nucleus/');
$len = strlen($request) - $st_pos;
if($len != 0)
$request = substr($request, $st_pos, $len);
else
$request = 'index.php'; // ファイル名省略時は 'index.php' としてカウントする
// 個別アイテムページが静的URLの場合は動的URLとしてカウントする
$request = eregi_replace('^item-([0-9]+).html', 'index.php?itemid=\\1', $request);
// '/nucleus/?item...' のようなパターンも 'index.php?item...' としてカウントする
if($request[0] == '?')
$request = 'index.php' . $request;
// アクセスを登録する
define("_BBC_PAGE_NAME", $request);
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>
このbbclone.phpを、Nucleusのindex.phpから呼び出すようにします。
<?php
// This file will generate and return the main page of the site
$CONF = array();
$CONF['Self'] = 'index.php';
//$CONF['Self'] = '';
include('./bbclone.php');
include('./config.php');
selector();
?>
// This file will generate and return the main page of the site
$CONF = array();
$CONF['Self'] = 'index.php';
//$CONF['Self'] = '';
include('./bbclone.php');
include('./config.php');
selector();
?>
これでNucleusからBBCloneを使用することができます。
キーワードの文字化け対応
BBCloneの解析結果を見てみますと、キーワードに日本語がある場合に文字化けを起こしていることがあります。これは検索エンジンの使用している文字コードをそのまま使用しているため、それが設定の文字コードと異なっている場合に起こります。例えば、Yahooの場合、EUC-JPでエンコードされておりますので、UTF-8で表示しようとすると'???'と表示されます。そのため、これをUTF-8に変換してやる必要があります。
ただ、これはEUC-JPとして見ても実は変な文字です。例えば「SEO対策日記」で検索した場合、「seo碚策脣記」として表示されてしまいます。これが何故なのかは未だによく分かっていません。URLデコードのタイミングをかなり遅くしてやることで解決するようにはなりましたが、その理由は分かっていません。
修正するファイルはlib/referrer.phpです。URLデコードはこのファイル中のbbc_get_search関数で実行されていますので、まずはこれをコメントアウトします。
foreach ($array as $string) {
//$string = rawurldecode(strtolower($string));
//$string = str_replace("\"", "", str_replace("'", "", $string));
// skip empty GET variables
if (substr($string, (strlen($string) - 1)) == "=") continue;
//$string = rawurldecode(strtolower($string));
//$string = str_replace("\"", "", str_replace("'", "", $string));
// skip empty GET variables
if (substr($string, (strlen($string) - 1)) == "=") continue;
そしてURLエンコードされたままで全ての処理を行い、最後のログに保存する部分の直前にURLデコードします。このとき、文字コードの変換も行います。bbc_get_keywords関数の最後の処理を次のように修正します。
foreach (bbc_get_sep($raw_search, $word_sep) as $key) {
// Filter search engine cache indicator
if ((preg_match("#^cache\:[a-z0-9]{8,16}\:#", $key)) || (strlen($key) > 50)) continue;
// URLデコードと文字コードの変換を追加
$key = rawurldecode(strtolower($key));
$key = str_replace("\"", "", str_replace("'", "", $key));
if(strpos($char_enc, 'UTF-8')===false) {
$key = mb_convert_encoding($key, "UTF-8", $char_enc);
}
if (!isset($access['key'][$key])) $access['key'][$key] = 0;
$access['key'][$key]++;
}
// Filter search engine cache indicator
if ((preg_match("#^cache\:[a-z0-9]{8,16}\:#", $key)) || (strlen($key) > 50)) continue;
// URLデコードと文字コードの変換を追加
$key = rawurldecode(strtolower($key));
$key = str_replace("\"", "", str_replace("'", "", $key));
if(strpos($char_enc, 'UTF-8')===false) {
$key = mb_convert_encoding($key, "UTF-8", $char_enc);
}
if (!isset($access['key'][$key])) $access['key'][$key] = 0;
$access['key'][$key]++;
}
$char_encには元の文字コードが入ります。これは検索エンジンによって決まっているようです(URLエンコードと検索エンジン参照)。
この検索エンジンによって$char_encの値が決まる部分を追加します。修正箇所は同じbbc_get_keywords関数の、先ほどのforeachループの少し前です。
if (!$is_search) return false;
// 検索エンジンによって文字コードを決める
$url = parse_url($ref);
if(strpos($url['host'], 'www.google.')!==false || strpos($url['host'], 'search.msn.co.jp')!==false)
$char_enc = "UTF-8";
elseif (strpos($url['host'], 'www.excite.co.jp')!==false)
$char_enc = "SJIS";
else // Yahoo, goo, infoseek, etc
$char_enc = "EUC-JP";
$is_query = strpos($ref, "?");
$ref = ($is_query !== false) ? substr($ref, ++$is_query) : substr($ref, (strpos($ref, "://") + 3));
$get_vars = bbc_get_sep($ref, $var_sep);
$raw_search = bbc_get_search($get_vars);
if ($raw_search === false) return false;
// 検索エンジンによって文字コードを決める
$url = parse_url($ref);
if(strpos($url['host'], 'www.google.')!==false || strpos($url['host'], 'search.msn.co.jp')!==false)
$char_enc = "UTF-8";
elseif (strpos($url['host'], 'www.excite.co.jp')!==false)
$char_enc = "SJIS";
else // Yahoo, goo, infoseek, etc
$char_enc = "EUC-JP";
$is_query = strpos($ref, "?");
$ref = ($is_query !== false) ? substr($ref, ++$is_query) : substr($ref, (strpos($ref, "://") + 3));
$get_vars = bbc_get_sep($ref, $var_sep);
$raw_search = bbc_get_search($get_vars);
if ($raw_search === false) return false;
現在、EUC-JPであるYahooと、UTF-8であるGoogle及びMSNでの実績がありますが、一応、これでキーワードも文字化けせずに表示されるようになりました。ただ完全ではなく、まだ文字化けした文字が混じっております。この部分に関してはまだまだ改良していく必要があると思います。
※9/12 msnの文字コードはUTF-8でしたので、その修正を行いました。
No comments yet
Add Comments
Trackbacks
Trackback URL
BBClone導入しました 飲み歩記 =かくのぺえぢ= pinged on 2007-08-01
Nucleusを使ってますが手頃なアクセス解析としてBBcloneを導入してみました。
Nucleusでの解析プラグインもあったようですが、セキュリティ的に現在は
使用不可になっているので、こいつを導入してます。
無...
アクセスログ解析ソフトを導入 @もろいことない? pinged on 2005-05-06
無料SEO対策日記さん、および閑話休題::BLOGさんのサイトを参考に設置しました。今まではカウンターだけだったので、果たしてこの増加したカウントはロボット?スパム?閲覧者?と疑心暗鬼でしたが、これからはき...
BBCLONE TS-Works Weblog pinged on 2005-04-25
Nucleus関係で面白いプラグインはないかと、ネットを徘徊していたら、BBCl...
BBCloneいれてみました 唯々諾々 pinged on 2004-12-22
無料SEO対策日記さんのBBCloneをNucleusで使うを参考にBBClone0.4.6aをインストールしてみました、xreaのアクセスログ閲覧でも必要十分かと思っていましたけれども、是は直感的で解り易いです。ただ、キーワード...
BBCloneを入れてみる きままなBLOG pinged on 2004-11-27
NucleusユーザにはBBCloneという解析ソフトを使用していらっしゃる方が多いようです。
そこで、さっそく導入してみる事にしました。
参考記事はやはり、静的アドレスでお世話になった、無料SEO対策日記 さんの「BBC...
アクセスログ採り始めました。 良識を重んじる非国民のブログ pinged on 2004-10-02
BBCloneっていうやつを使ってアクセスログをとりはじめました。設置にはBBCloneをNucleusで使う(無料SEO対策日記さん)のを参考にさせてもらいました。(こういうときにトラックバックってすればいいんですっけ?)
|
最高気温33℃