人気記事のランキングを表示する

Posted by
ぴろり
Posted at
2005/05/26 17:44
Trackbacks
関連記事 (10)
Comments
コメント (2)
Post Comment
コメントできます
Category
MovableType
 Movable Type で構築したサイトで、各記事ごとのアクセス数を集計できれば、 "今週の人気記事 トップ 10"のような機能が実現できるでしょう。 丁度、ここのホストでも のアクセスログがユーザに解放されているので、 これを利用することができそうです。
 結果、特にを追加せず、 を使用することで、 サイトの容易性、他ホストでの可搬性を高めつつ、これを実現することができました。 また、記事のファイル名がエントリ ID 以外(日付やキーワード)で生成されている場合にも対応でき、 cron による定期実行やからのランキング更新も可能です。
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

経緯

 先ずは、この人気記事ランキングを実現する方法について したところ、"Masahiko Isshiki WEB SITE:MT で人気記事のランキングを表示する" という記事が大変参考になりました。ここでは Jeff Borlik 氏の T-MostVisited Pluginを使用してこれを実現する方法が、インストール手順から詳しく説明されています。このは MT の再構築時にアクセスログの集計と表示を行うためのもので、比較的簡単に導入し実現することができそうです。
 しかしながら、このでは記事ファイル名が記事 ID を含む必要があり、これ以外の書式、例えば日付を基に生成されている場合(/2005/1234_1234.html)などでは、このを使用することができません。これは単純に、アクセスログに残ったファイル名から記事 ID を特定できないことから、その記事のタイトルや投稿者といったにアクセスできないためだと思われます。
 また、ランキングのリアルタイム性を確保するために、これに続く"MTで人気記事ランキングの定期自動実行"で、 のスクリプトを別に用意し を併用する方法が紹介してあります。このように MT 以外のところで様々なギミックが必要となり、結果的にランキング表示周りの複雑性が増すことになっているようでした。

 今回、紹介する方法は以下の点に重点が置かれています。

  • 記事ファイル名が、日付やキーワードなどから生成されていても対応できること
    … ここのサイトが日付による命名ルールになっているので必須
  • gzip 圧縮されたアクセスログにも対応
    … SAKURA Internetのサーバが(以下略
  • できる限り 知識だけで が容易に行えること
    … ランキングは で成形することになりますが、 この部分が だの だのと混合すると判りにくい&編集しにくいため
  • 設置と運用が簡単
    … 簡単に使えて、あとは手間いらずが理想的
  • 軽い
    … MT の再構築はかなり重い処理です。アクセスログの解析や再構築の負荷を上手に分散します。

動作要件

  • 今のところ Movable Type しか考えていません
  • が稼動すること
    … スクリプトが で書かれています。
  • サーバのアクセスログが使用できること
  • または などによるアクセスログが使用できること
    … ログファイルは NCSA コモンログファイル形式に対応しています。 これ以外のログ形式でもスクリプトを編集すればおそらく対応できます。
  • (あれば楽チン) cron などの定期実行がサポートされていること

インストール

 先ずは次のファイルをして適当な場所に解凍してください。 hottopic200.php.tmpl というファイルが 1 つ含まれているハズです。 [ダウンロード]

Step 1. したをインデックスに登録

 したファイルは、 「『アクセスログの集計を行うための スクリプト』のためのインデックス(あぁ、ややこしい)」のため、 このままでは実行できません。 このファイルを MT 管理画面から[]-[インデックス]に登録します。 このの構築を行って初めて、 "出力ファイル名"で指定されたファイルが実行可能な スクリプトとなります。 また"再構築オプション"は"自動で再構築"でも構いません。 再構築時の負荷はマスターアーカイブの生成と同程度と思います。
 この段階で構築はできると思いますが、設定が済んでいないので実行はできないでしょう。 次の各種設定に続きます。

Step 2-1. 環境設定 - 動作設定

 スクリプトの動作設定を行います。 の 15〜30 行付近にある以下の項目を修正してください。
nDivDay
集計する期間を日単位で指定します。 スクリプトが実行された瞬間から過去 n 日間のアクセスを集計します。
nTopEntry
集計した結果のうち少なくとも上位 n 件(≠位)をランキングに出力します。 同順位に複数エントリがある場合、その全てを表示します。
szLogDir
サーバのアクセスログが保存されているディレクトリへのパスを指定します。 相対パス指定はしていません。
szOutput
集計結果を出力するファイル名を指定します。相対パス指定はしていません。

Step 2-2. 環境設定 - ログファイル名を指定する

 サーバによってアクセスログのファイル名が様々です。 37 行付近の GetLogFileNames という関数内でアクセスログのファイル名を生成しているので、 お使いのサーバのアクセスログのファイル名に合わせて修正してください。 毎日日付ファイル名でログを残すものや、過去ログを gzip 圧縮するもの、直近の数日のみ残すものなど様々です。
 ログファイルを一つも読めていないような場合は、szLogDir の設定とここの設定を疑ってみてください。

Step 2-3. 環境設定 - 集計対象とするファイル名を指定する

 お使いの MT のによって、個別アーカイブの生成ファイル名は様々かと思います。 76 行付近の IsTargetURL はアクセスログに残されたファイル名が ランキング集計対象か否かを判定するための関数です。 ランキング集計したいファイル名にマッチするよう の正規表現を修正してください。
 スクリプト実行時の標準出力を見て、1 件も集計されいないような場合、 ここのパターンマッチングで失敗していることが考えられます。

Step 2-4. 環境設定 - 集計結果を成形する

 集計結果を成形して書き出すために CreateEntryListItem(111 行付近) と CreateEntryList(126 行付近) のうち、 それぞれ 2 つの /******** コメント ********/ で囲まれた範囲を修正してください。 とりあえず動作を見たいという御仁は、このステップを飛ばされても構いません。
 1 つのエントリにつき CreateEntryListItem が呼び出されて、1 つ分の を生成します。 次にこれが nTopEntry 回だけ繰り返されて、 CreateEntryList でその結果を含めた が 生成されるようになっています。
  部分は タグや MT のタグをそのまま使うことができます。 またランキングの集計結果を使う場合は {$entry['キー名']} という記述で値を自由に埋め込むことができます。 例えば、次のようにして記述できます。

Step 3. ランキングを集計する

 Step 2.までの設定が終わったら、を再構築してランキング集計スクリプトを書き出します。 そして、このランキング集計スクリプトを実行すれば、集計結果が szOutput に出力されます。 ランキング集計はこのスクリプトが実行された瞬間に行われます。
 スクリプトを実行する手段として
  • シェルログインしてコマンドラインで実行する
  • cron を使って定期実行する
  • から呼び出す
の何れかの方法が可能です。目的に合わせて適宜選択してください。

Step 4. 集計結果を利用する

 集計結果ファイルはそのまま表示することもできますし、 の include を利用してページに埋め込むこともできます。 後々のメンテナンスのことを考えると、集計スクリプトで成形する は最低限にし、 それを取り込む側で本格的にを施す方が簡単でしょう。

その他の機能 - エントリの他のが必要になった

 CreateEntryListItemCreateEntryList を成形する場合、 エントリについてさらに細かなが必要になることがあります。 88 行付近の GetEntryList では、 の生成に必要なエントリの各種のテーブルを作成しています。 ここに任意の名前でキー名を登録し、タグを駆使してエントリのを取得するようにします。

 この部分は スクリプトとして実行される部分になりますので、 encode_php タグ・アトリビュートを指定して、文字列を安全にしてください。


この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事

この記事のアーカイブ

全てのカテゴリ »
MovableType
全てのタグ »
, , ,
全ての記事 »
2005年

関連記事/トラックバック (最新 5 件を表示しています)

blog Boreal Kiss のスクリーンショット
タイトル
人気記事ランキング設置メモ
Trackbacked at
2007/10/04 16:30
from
blog Boreal Kiss
評価
Web Scouter
概要
<概要> MovableTypeの各記事の人気ランキングを表示する方法。MTのラ...

BITMAP のスクリーンショット
タイトル
人気エントリーのランキングを表示
Trackbacked at
2007/06/04 23:36
from
BITMAP
評価
Web Scouter
概要
当ブログの各エントリーへのアクセスをカウントし、そのランキングを表示させてみた。...

Webプログラミングの備忘録 のスクリーンショット
タイトル
MT(Movable Type)の人気記事ランキングの表示
Trackbacked at
2007/03/29 13:38
from
Webプログラミングの備忘録
評価
Web Scouter
概要
人気記事のランキングを表示するためのMT用プラグインがT-MostVisited Pluginとして公開されているのだが、記事ファイル名に記事IDを含んで...

BlueBoxBlog のスクリーンショット
タイトル
MTの人気記事閲覧ランキング
Trackbacked at
2007/02/22 03:16
from
BlueBoxBlog
評価
Web Scouter
概要
MTで、アクセスの多かった記事トップ10みたいなことができるプラグインや方法はな...

とあるアフィリエイターカップルのおはなし のスクリーンショット
タイトル
人気記事ランキングの追加
Trackbacked at
2006/11/12 02:01
from
とあるアフィリエイターカップルのおはなし
評価
Web Scouter
概要
明日はちぃやんのスピーチの本番なのに、僕は風邪をひきました。 最近は寒くなってきていたので、ちょっと危ないなぁと思っていた矢先に風邪を・・・ (^0^;) 体の...

この記事のトラックバック URL

寄せられたコメント (最新 5 件を表示しています)

Posted by
ぴろり ◆OLEEi.VOX.
at
2008/03/15 18:33
ID
vaxhsKBA

すみません! リンク切れを修正しておきました。ご指摘ありがとうございます!

Posted by
ウヴォー
at
2008/03/14 21:29
ID
NxsNmUtA

管理人様
はじめまして。
人気記事のランキングを探したどり着きました。
hottopic200.php.tmpl のダウンロードがリンク切れのようで出来ません。
よろしければ再度公開していただけると幸いです。
この外にも気になるプラグインたくさんあります。
今後のご活躍期待しております!

コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)