MTで人気エントリーのランキングを表示 【ウェブログ】
当ブログの各エントリーへのアクセス数を集計し、そのランキングを表示させてみた。
現在、ランキングの上位5位までを「人気エントリー」としてサイドバーに表示させている。
ランキング更新のタイミングは毎時。
集計期間は、いまのところ過去一週間としている。
参考にしたのは、下記のサイトだ。
Open MagicVox.net:人気記事のランキングを表示する
基本的に上記サイト及び、上記サイトからのリンク先サイトの内容に沿ってやってみた。
以下、覚え書き。
自分の環境
MTのバージョン:Movable Type 3.35-ja
レンタルサーバー:さくらインターネット
ドメイン:独自ドメイン(capsule-net.com)
Apacheログの格納場所:/home/capsule-net/log 配下
その他:PHPが利用可能であること(当ブログは、もともとphp化してある)
1. 前準備
まず、mt-config.cgi の中に以下の記述が無い場合、以下の記述を追加する。
理由は、以下で作成する出力ファイルのパーミッションを"755"にするため。
とりあえず、何も考えずに追加する。
DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022
HTMLPerms 0777
UploadPerms 0777
2. hottopic200.php.tmpl のダウンロード
上記 Open MagicVox.net のサイトで、hottopic200.php.tmpl をダウンロードする。
3. テンプレートの作成
MT管理画面のテンプレート -> インデックスで、「テンプレートを新規作成」する。
テンプレート名や出力ファイル名(拡張子は .php)は適当に決める。
例:hot_entry.php

「テンプレートの内容」に、上記でダウンロードした hottopic200.php.tmpl の内容を
コピー&ペーストする。
4. hottopic200.php.tmpl の修正
テンプレートにコピーした hottopic200.php.tmpl の内容を、自分の環境に合わせて
以下のように書き換えた。
--- 14行目あたりから ---
// 過去 n 日間のログを集計する
$nDivDay = 7;
// 上位 n 件を集計する
$nTopEntry = 5;
// ログファイルのディレクトリパス
$szLogDir = '/home/capsule-net/log';
// 集計結果の出力ファイルパス
$szOutput = '/home/capsule-net/www/bitmap/output_entry.php';
--- 113行目あたりから ---
/******** エントリ1つの成形 ********/ $ret = <<<MYHTMLSAFEOUTPUT
<li>
<font color="#660000">第{$entry['Ranking']}位</font>:
<a href="{$entry['EntryPermalink']}">{$entry['EntryTitle']}</a>
({$entry['ReferCount']} bit)
</li>
MYHTMLSAFEOUTPUT;
/******** エントリ1つの成形 ********/
--- 81行目あたりから ---
// ユーザによって出力ファイル名が異なる場合は修正してください。
return (preg_match
("/^\/bitmap\/archives\/\d{4}\/\d{2}\/\d{8}\_\d{2}\.php/", $url));
※自分のブログのエントリーファイル名に合わせて、Perlの正規表現で記述する。
例:/bitmap/archives/2007/06/20070604_02.php
--- 135行目あたりから ---
/******** ページ全体の成形 ********/ $ret = <<<MYHTMLSAFEOUTPUT
<ul>
<li>- ここ一週間のアクセス状況 -</li>
{$entry_list}
</ul>
MYHTMLSAFEOUTPUT;
/******** ページ全体の成形 ********/
上記修正後、テンプレートの再構築を行う。
再構築後、このテンプレートファイル(hot_entry.php)のパーミッションが
"755"になってるはず。
もしも上記 1. の前準備を行ってない場合、パーミッションは"666"になる。
これだと、後の処理で不具合が起きる。
5. テンプレートの確認
上記テンプレート再構築後、ブラウザでテンプレートにアクセスしてみる。
例:http://www.capsule-net.com/bitmap/hot_entry.php
以下のような感じで表示されたらOK。

同時に、出力ファイルが出来ていることも確認する。
例:http://www.capsule-net.com/bitmap/output_entry.php
出力がうまくいかない場合、上記 4. の項目で設定した正規表現を見直す。
うまくいかない原因の多くは、この正規表現に問題があるため。
6. エントリーのランキングを表示させたい部分に、上記出力ファイルを表示させる
サイドバーに、以下のような感じで追加。
<h2>人気エントリー</h2>
<? include("<$MTBlogURL$>output_entry.php"); ?>
追加したあとに再構築を行い、ランキングが表示されているか確認する。
7. cron でランキングの集計を定期的に自動更新させる
さくらインターネットの「コントロールバネル」にログインする。
ログイン後、左側にある「CRON設定ファイルの編集」をクリック。

「新規項目の追加」をクリックする。

「実行するコマンド」と「実行させる日時」を設定する。
当ブログの場合は以下のような感じ。
実行するコマンド:
/usr/local/bin/php -f /home/capsule-net/www/bitmap/hot_entry.php
実行させる日時は、毎時間毎に設定した。

最後に「送信する」をクリックして保存する。

以上で、毎時間毎にランキングが自動集計され、ランキングの表示が変動する。
投稿者 zero | 2007年06月04日 月曜日 23:26:12 | パーマリンク |







アラッソヨ [08/11/06]




- コメント投稿フォーム -