人気記事ランキング

このブログのトップにアクセスの多かった記事を4つ表示していますが、自動で生成されているわけではありません。
自分でアクセス解析の結果を見て、アクセスが多いページ4つを選んで自分で作成しています。
しかしながら、ちょーめんどくさいので、ログから自動で人気記事ランキングを作りたい。
そう思って探していたらやっぱりありました。
世の中すごい人がいるものですね。
というわけで、今回はMovableTypeで人気記事ランキングを作る方法です。
作る方法というか、クロスブリードさんのMT-MostVisitedの導入方法を、ファイル名がエントリーID以外でも強引にやっちゃう方法です。

人気記事ランキングを作るには、MT-MostVisitedプラグインを利用します。
コレ自体の導入の仕方は、以下の参考にさせていただいたサイトさんが素晴らしい説明をしてくれているので、割愛。。。

クロスブリードさんはPHP化のときもじっくり見させてもらって感謝感謝ですm(._.*)mペコッ

で、いつものごとく、紹介して終わりか?、というとそうじゃないんです。
相変わらず、皆さん素晴らしい解説をしてくれているのに、動きませんw

なぜ動かないのか、というと、
このMT-MostVisitedプラグインは、ログに記録されたページの
ファイル名からEntryIDを取得
するんですよ。

と言われても、使ったことある人しかわからないですよね。
クロスブリードさんでも、コメント欄に
アーカイブファイル名を日付とかにしたので、現在は使ってない
って書いてましたが、私も日付でアーカイブファイル名を作ってるので同様に使えないのです。

んじゃ、どうするか。
エントリーIDのアーカイブファイル名にするのが一番楽なんですが、何か負けた気がするので、ログファイルに記録されるファイル名を強引に書き換えてみたいと思いますw

ログ取りcgiの改造

まず、基本はクロスブリードさんのところの構成です。
(ログ取りcgi+エントリーアーカイブでcgiを呼ぶ)
ログ取りのcgiの元は、クロスブリードさんのcgiを利用させていただきましたm(._.*)mペコッ
クロスブリードさんのcgiを元に、cgiの呼び出し側から「***.cgi?EntryID=35」というようにEntryIDを入れてあげて、そのIDを使ってファイル名を生成しています。
(できれば、アイディアだけ汲み取ってご自分でスクリプトを書いていただけると一番うれしいですw)

これをダウンロードしましょ

$max、$myself、$archive_pathは自分の環境に合わせて変更してください。
(よく見てないですが、恐らく今のスクリプトだと$myselfは使ってないです。)
基本はクロスブリードさんのところの設定と同じです。

で、本家のcgiはエントリーアーカイブに、以下のような感じで書きますが、

<SCRIPT Language=”JavaScript”>
<!–
document.write(“<img src=’http://(サーバ名)/logs/aclog.cgi?”);
document.write(document.referrer+”‘ width=1 height=1>”);
// –>
</SCRIPT>
<NOSCRIPT>
<IMG src=”http://(サーバ名)/aclog.cgi?JS_OFF” width=”1″ height=”1″>
</NOSCRIPT>

改造したログcgi使う場合は、エントリーアーカイブに

<SCRIPT Language=”JavaScript”>
<!–
document.write(“<img src=’http://(サーバ名)/logs/aclog.cgi?EntryID=<$MTEntryID$>&ref=“);
document.write(document.referrer+”‘ width=1 height=1>”);
// –>
</SCRIPT>
<NOSCRIPT>
<IMG src=”http://(サーバ名)/logs/aclog.cgi?EntryID=<$MTEntryID$>” width=”1″ height=”1″>
</NOSCRIPT>

と、追加します。
srcのURLは適度に書き換えてください。
まぁ、クロスブリードさんのcgi呼び出しに、EntryIDを追加しただけです。
「JS_OFF」って何に使ってるかわからなかったので、消しましたが・・・。
(CGIわかりませぬ・・・)
まぁ、デバックとかは追い追い。。。

このログcgiで吐き出されたログファイルを使えば、MTMostVisitedが動いてくれる・・・はず。
現在、トップページでためしに動作させてます。
といっても、まだ自動更新ではないです・・・w
自分で再構築する必要があります。
最終的には、トップページの下部にあるように専用の画像付きで出したいし、まだまだいじらなくてはいけません。

できればログも、新たにログを取るのではなくて、
アパッチログに記録されている日付ファイル名を、エントリーIDに変換したいところですがね。

MTで、インデックスが更新される際に「EntryIDとファイル名の関係を示したファイル」を作るようにして、そのファイルを利用して、アパッチログを変換。

と、考えてはみたが、cgiは詳しくないので今すぐには作れない;w;
本棚探したらcgiの本もあったし、今度チャレンジする・・・かも。