本文へ
Crossbreedクロスブリード

ホーム / ネット文化 / MTで人気記事ランキングを。(2003年12月14日)

Movable Type

MTで人気記事ランキングを。(2003年12月14日)

ずっと設置したいと思っていたmovabletypeのplugin、MTMostVisitedの設置にやっと成功した。このプラグイン、簡単に言えば「記事別アクセスランキング」。#BLOG一色政彦さんと、Living by the Animal Faith@KHさんのネタを見て激しく設置の欲望にかられた。トップページの左側の中ほどにあるやつがそれ。

現在のランキングを表示すると
ranking.jpg
↑こうなる

MT使ってて、これやりたくてもできなかったヒトは結構いるんじゃないかと思うので、僕の苦難の道を記そうと思う。参考になれば幸いだなあ。

実はこのplugin、#BLOGさんとこで見つけて早速やってみたのだが、あっさり撤退。何度やっても上手く行かなかった。イライラ上昇。
で、調べるうちに分かったことがあった。

apacheのアクセスログを使うこのプラグイン、ここのサーバではアクセスログが上手く取れないことが分かった。
それなら作ってしまえ!というわけで、ログを取るCGIを作成して成功した。ちょっと感動。perlなんてさっぱりわからないけど、サンプルを引っ張ってきて見よう見真似で。なんとかなるもんだね。

それでは設置方法をば。

まず、このプラグインを導入する前に、Akira HangaiさんののApache::ParseLogというapacheログを解析するモジュールが必要です。何にも考えずにダウンロードします。リンク先の「source」ってとこ。

DLした「ParseLog.pm」は (MTのインストールディレクトリ)/extlib/Apache/
にアップロード(以下UL)。これで第一段階完了です。

次に本命のJeffrey Borlikさんのサイトに行き、The plugin is available (as a ZIP archive) hereと書かれたMTMostVisitedのプラグイン(zip)をDLする。解凍したら、mt-mostvisited.plをテキストエディタで開き、
my $logdir、my $root、my $filetype、my @searchfilesを

my $logdir = "/var/log/httpd";←apacheのログファイルのパス
my $root = "/blog/archives";←アーカイブファイルのパス
my $filetype = "html";
my @searchfiles = ("$logdir/access_log",←ログファイル名
"$logdir/access_log.1",
"$logdir/access_log.2",
"$logdir/access_log.3",
"$logdir/access_log.4",
"$logdir/access_log.5",
"$logdir/access_log.6");

こんなカンジで書き換えます。ここでapacheのログが取れないが為に、僕は何日も悩んだのですが、apacheのログがとれ、しかも一週間分とかに区切って出力してくれる優しいホスティング会社に加入している方なら迷わずapacheのログのパスを記述しましょう。

僕の利用してるホスティングサーバは厳密に言うとログは取れたんですが、切り分けをしてくれなかったので、仕方なく他のディレクトリに移動しようと思ったが、FTPで取得できない(SSIで接続しないと取得できない)上にTELNETの使い方が全く分からないというどうしようもない状態に陥った為、

自分でログを書き出すプログラムを作ってしまえ

ということを考えた。無謀。
それと、apacheのログって画像なんかにアクセスしても生成されるから一週間程度で物凄い量になるのでもっと簡単にしたいというのもあった。

というわけで、apacheのログの形式で書き出すアクセス解析のようなperlスクリプトを作ったってわけだ。なんかムダなことをやってるようだがあまり気にしない。つうかヒトのをパクリまくって作ったんですが。

アクセスログ取得スクリプト(へなちょこ)
↑ZIPで圧縮してます。念のため。

解凍したら、テキストエディタでaclog.cgi開こう。

変更するところは3個所

$aclog = 'access_log'; # logfilename
$max = '5000'; # logsize
$myself = 'https://cross-breed.com/';

$aclogはアクセスログが格納されるファイル名。
$maxはログの最大件数。これは好みで
$myselfは自分のルートのアドレスをフルパスで。

こんだけ。FTPでUPLOADしたら、aclog.cgiのパーミッションを755に。←これはサーバによって違うかも。

次に、空のテキストをaccess_logというファイル名で保存してこれもUPLOAD。
もうひとつ。log.gifという透明なGIFファイルを同じディレクトリにUPLOAD。

次に、Individual Entry Archiveに、以下のスクリプトを追加。

こんなカンジ。パスは各自適当に。

あ、そうそう。自前アクセスログスクリプトを設置したなら、上のmt-mostvisited.pl
の
my $logdir = "/var/log/httpd";
の部分をログファイルのパスを指定してください。
ウチのサーバだったら
"/home/(ユーザ名)/public_html/logs"
↑こんなカンジでかいてますね。

後は、一色さんとこのが非常に分かりやすく解説されてますが一応書いておくことにする。

MTの管理画面で新しいIndex Templateを作成する。
Templateの名前は 「Popular Ranking」
出力ファイル名は「(任意のディレクトリ)/ranking.html」
Templateの中身は

こんなカンジで書いてます。ま、これも適当に。

そしてMain Indexの中の任意の場所に以下のコードを。

これをリビルドして完了。

うまく行きましたか?
間違いや指摘がありましたら、やさしく教えてくださいね。よろしくです。

読者のコメント1件

記事が公開された当時に寄せられたものを、そのまま残しています。受付は終了しました。

  1. ayu

    すみません。調子に乗って配布したスクリプトでしたが、不具合があることが判明しました。サーバによってはログをちゃんととれないことがあるようです。
    修正してます。使ってみてください。