この記事の内容は、時間経過およびプログラムやシステムのバージョン アップなどの事情によって、現状に正しくそぐわない内容、またはそれどころか、場合によっては問題を引き起こす可能性があります。参考程度に留め、関連記事アーカイブを検索してみてください。

オススメ記事を紹介する MovableType プラグイン:RecommendedEntry

Posted by
ぴろり
Posted at
2007/02/12 16:59
Trackbacks
関連記事 (2)
Comments
コメント (42)
Post Comment
コメントできます
Category
プラグイン カテゴリ

 Amazon などで『この商品を買った人はこんな商品も買っています』という案内をご覧になったことがあると思います。ユーザの購買動向を分析することで関連商品を推薦(リコメンド)してくれる機能で、その絶妙なチョイス(?)に釣られて他の商品ページに寄り道してしまう方も多いのではないでしょうか?
 そこで、ブログなどでもこれを真似て『この記事を読んだ人はこんな記事も読んでいます』なんてナビゲーションが作れると面白いかもしれません。RecommendedEntry は、過去の訪問者が辿った記事の傾向を集計して、簡易的な記事リコメンデーション機能を実現するための MovableType プラグインです。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

動作環境

 ビジタの動向データの集積と集計に PHP を使用しています。ご利用のサーバで PHP が使用でき、かつ RecommendedEntry をご利用の予定のブログの個別記事ページで PHP が動作する必要があります。

  • MovableType 3.3x 以上(もしかしたら 3.2 でも動くかも)
  • [必須] 個別エントリアーカイブで PHP が動作すること

動作概要

動作概要図

 RecommendedEntry プラグインは、個別記事ページにユーザ追跡のためのコード片を埋め込みます。ユーザが個別記事ページを閲覧する度に、ユーザがどのような順番でページを渡り歩いたのかを集積し、このデータを集計することで記事間のユーザの移動状況を求めることができます。ユーザ追跡にはブラウザの Cookie を使用していますが、あくまで任意のユーザの記事間の移動を追跡することが重要であって、ユーザを個々に限定・追跡することが目的でがありません。
 また、記事リコメンデーションの精度についてですが、ユーザ嗜好や記事内容の関連性のクラスタリングと云ったリコメンデーションで多用される技術は全く使われていません。個々のユーザが現在閲覧している記事を基点としたユーザの移動をデータとして集計し、多いものから順に表示するだけの非常に好い加減かつお遊び的なものであることを了承ください。

導入方法

 少し手順が複雑ですが、気合で(ぇー

  1. プラグインの導入
  2. エントリ一覧用インデックステンプレートの作成
  3. データフォルダの準備
  4. エントリアーカイブテンプレートの修正

1.プラグインの導入

 ダウンロードしたアーカイブを展開します。MTRecommendedEntry.pl というファイルが一つだけ現れるので、MovableType のインストールフォルダにある plugins にコピーしてください。その後、MovableType の管理画面から[プラグイン]と移り、RecommendeEntry プラグインが表示されていることを確認します。

2.エントリ一覧用インデックステンプレートの作成

 RecommendeEntry プラグインはエントリの一覧を記述した PHP ファイルを要求します。以下の内容でインデックステンプレートを新規作成してください。インデックステンプレートの名前とファイルの出力先はどこでも構いませんが、どちらか一方を控えておいてください。
 このインデックステンプレートは、後述の $MTRecommendedEntryParam$ タグで必要とするパラメータに応じて編集してください。下の挙げた例では記事タイトル(title)と記事のパーマリンク URL (permalink)が記述されています。記事 ID (eid) の項は RecommendeEntry プラグインが使用するため変更しないでください。

<?php
function RecommendedEntry_getAllEntries () {
	$ret = array ();
<MTEntries lastn="999999">
	array_push ($ret, array (
		'eid' => '<$MTEntryID$>',
		'title' => '<$MTEntryTitle encode_php="q"$>',
		'permalink' => '<$MTEntryPermalink$>',
	null));
</MTEntries>
	return ($ret);
}?>

3.データフォルダの準備

 次に、RecommendeEntry プラグインが集計したユーザ動向のデータファイルを保存するためのディレクトリを作成してください。データファイルには個人情報が含まれるわけではありませんが、気になる人はドキュメントルート以外に作成されることをオススメします。作成したディレクトリの絶対パスを控えておいてください。

4.エントリアーカイブテンプレートの修正

 RecommendeEntry プラグインを用いて、ユーザ動向の集計と記事リコメンデーションを行うために、個別アーカイブテンプレートを修正します。最も小さな個別アーカイブテンプレートは次のようになります。

<$MTUseRecommendedEntry template="(2で作ったインデックステンプレートの名前)" datapath="/home/your/account/data/path"$>
:
<h1><$MTEntryTitle$></h1>
<p>
  <$MTEntryBody$>
</p>
:
<h2>この記事を読んだ人はこんな記事も読んでいます</h2>
<ul><MTRecommendedEntries count="5">
  <li>
    <a href="<$MTRecommendedEntryParam name="permalink"$>"><$MTRecommendedEntryParam name="title"$></a>
    (<$MTRecommendedEntryParam name="count"$> hits)</li>
</MTRecommendedEntries></ul>
:

 <$MTUseRecommendedEntry$> タグには、先ほど準備したエントリ一覧用インデックステンプレートの名前とデータフォルダのディレクトリパスを指定する必要があります。また <$MTUseRecommendedEntry$> タグはあらゆる文字出力が行われる前に記述されるよう、必ずファイルの先頭に置いてください。

追加されるテンプレートタグ

$MTUseRecommendedEntry$ タグ
 記事リコメンデーションを行うページの一番最初で文字出力を行う前に一度だけ記述してください。タグの前に文字列や空白文字、改行があると Cookie が正しく処理されませんので注意してください。このタグは動作に必要な PHP のコード片を生成します。個別エントリアーカイブのみで使用されることを想定していますので、カテゴリ別アーカイブや月別アーカイブ、インデックステンプレートでは使用できません。
template [必須*]
 エントリ一覧用インデックステンプレートの名前を指定します。 このパラメータを省略する場合、後述のindexが必須です。 両方の指定がある場合、indexによる指定が優先されます。
index [必須*]
 エントリ一覧用インデックステンプレートによって出力されたファイルへの絶対パスを指定します。 このパラメータを省略する場合、先述のtemplateが必須です。 両方の指定がある場合、templateによる指定を上書きします。
datapath [必須]
 データフォルダの絶対パスを指定します。 ユーザ動向のデータファイルがここで指定されたパス以下に生成されます。 このパラメータは省略できません。
cookie_expire
 ユーザ追跡用 Cookie の有効期間を設定します。このパラメータは省略できます。 省略時のデフォルト設定値は 30 日間です。
cookie_name
 ユーザ追跡用 Cookie の名前を設定します。このパラメータは省略できます。 省略時のデフォルト設定値は mtrcmnd_eid です。 既存の Cookie と名前が衝突する場合には変更してください。
MTRecommendedEntries コンテナタグ
 現在のエントリについて、流入数、流出数の多いエントリを列挙するためのコンテナタグです。このタグはループ処理のための小さな PHP コード片を生成します。一般的な MovableType テンプレートタグとは動作が異なりますので注意ください。
mode
 集計モードを設定します(動作概要図も参照してください)
  • 0 … 流入数(incoming flow)と流出数(outgoing flow)を合算します。ビジタの相互間の移動が多いエントリを集計します。デフォルト設定値です。
  • 1 … 流入数(incoming flow)のみを集計します。現在のエントリへビジタが流入した流入元エントリを集計します。
  • 2 … 流出数(outgoing flow)のみを集計します。現在のエントリからビジタが移動した流出先エントリを集計します。
offset
 ランキングの上位 offset 位を表示しません。デフォルト値は 0 です。
count
 ランキングの上位を offset で指定された順位から count 件だけ表示します。デフォルト値は 10 です。
$MTRecommendedEntryParam$ タグ
 MTRecommendedEntries コンテナタグの中で使用します。
name [必須]
 name で指定されたパラメータを表示します。 MovableType のテンプレートタグのようですが、実際には小さな PHP コード片を生成します。 そのため、テンプレートタグで有効なグローバルフィルタなどは使用できません。 name に指定できるパラメータには、エントリ一覧用インデックステンプレートで記述されたパラメータに加えて、 流入数または流出数を示す count が常に使用できます。
 先に挙げたエントリ一覧用インデックステンプレートの例では、 name パラメータには titlepermalink を指定することができます。 例えばあなたが記事の作成された日付と投稿者名も表示したいと思うならば、エントリ一覧用インデックステンプレートを以下のように修正し(一部抜粋)、name="date"name="author"とすることで実現できるでしょう。
		'eid' => '<$MTEntryID$>',
		'title' => '<$MTEntryTitle encode_php="q"$>',
		'permalink' => '<$MTEntryPermalink$>',
		'date' => '<$MTEntryDate format="%x" encode_php="q"$>',
		'author' => '<$MTEntryAuthorName encode_php="q"$>',

ユーザ動向のデータファイルについて

 RecommendedEntry プラグインが利用するユーザ動向が集積されたデータファイルについて説明します。MTUseRecommendedEntry タグの datapath パラメータによって指定されたディレクトリ以下に、<記事 IDα>.txt というファイル名で記事毎にテキスト形式のデータファイルが生成されます。

<記事IDα>	<流入カウントα>	0
<記事IDβ>	<流入カウントβ>	<流出カウントβ>
<記事IDγ>	<流入カウントγ>	<流出カウントγ>
:

 <記事IDα> の記事には <記事IDβ> から <流入カウントβ> の訪問があり、<記事IDα> の記事からは <記事IDβ> <流出カウントβ> だけユーザが移動したことを示します。初めてサイトを訪問するユーザや、Cookie の有効期限が切れたユーザが <記事IDα> を訪問した場合、同じ <記事IDα> の <流入カウントα> として記録されます。

困った時は

Warning: touch(): Unable to create file XXX/XXX.txt because Permission denied in XXX line XXと表示される
 データファイルの保存先に指定したディレクトリ(datapath)にCGI/PHPからファイルを生成できるように、適切な書き込み権限を与えてください。
Warning: Cannot modify header information - headers already sent by (output started at XXX:XXX) in XXX on line XXXと表示される
 $MTUseRecommendedEntry$タグはページの一番最初に記述してください。また、エントリ一覧用インデックステンプレートにも余計な空白、改行が含まれていないか確認してください。タグよりも前には空白・タブ文字や改行などのあらゆる文字出力があってはいけません。
ページ一覧が表示されない
同じページをリロードしただけではカウントされません。一度、他のページを見てCookieを受けてからページを見てください。

ライセンス

ダウンロード

RecommendedEntry  new
ファイルのMD5ハッシュ値:
ver.1.00, '07/02/12, 0 bytes, MovableType 3.33 で動作確認、PHP 必須
  • 初版公開

最新版のダウンロードやバグレポートはRecommendedEntry の trac レポジトリでも行っています。

ページ下方の Download in other formats → Original Format で取得できます。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  


この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:GADGET 応用 ~ この記事を読んだ人はこんな記事も読んでいます

関連記事/トラックバック (全 2 件中、最新 5 件まで表示しています)

Open MagicVox.net のスクリーンショット
タイトル
RecommendedEntry プラグインの導入は平均ページビュー増加に効果があります
Trackbacked at
2009/02/04 07:52
from
Open MagicVox.net
概要
 と言ってもいいでしょう。TinyLPO プラグインの効果測定をヒントにRecommendedEntry プラグインについても導入した効果測定もしてみま...

WEBデザインストック のスクリーンショット
タイトル
この記事を読んだ人はこんな記事も読んでいますを実現するプラグイン
Trackbacked at
2008/05/22 12:13
from
WEBデザインストック
概要
Amazonなどにある、この商品を買った人はこんな商品も買っていますを、Mov...

この記事にトラックバックを送るには?

寄せられたコメント (全 42 件中、最新 5 件まで表示しています)

Posted by
ぴろり ◆OLEEi.VOX.ぴろり ◆OLEEi.VOX.
at
2015/04/16 15:55
ID
Jkw0x5DQ
現在では、Google Analytics からデータを集計する方法が、汎用的でおすすめです。
GADGET 応用 ~ この記事を読んだ人はこんな記事も読んでいます
http://www.magicvox.net/archive/2012/05101454/
Posted by
footbrainfootbrain
at
2012/12/07 11:03
ID
8g8Fg1pc
"Deprecated: Function split() is deprecated in ***"と
"Warning: Cannot modify header information - headers already sent by ***"のエラーが表示されます。
PHPは、5.4.7です。
どうすればこのエラーを回避できますか?
Posted by
小鳥遊 あゆむ小鳥遊 あゆむ
at
2011/10/25 04:30
ID
JDUtBiz2
こんばんは。
先ほど、こちらに、質問のコメントをさせていただいたものです。
さきほどの件ですが、大変、お恥ずかしいのですが、こちらの凡ミスで、自己解決しました。
そのため、ご返答いただかなくても、大丈夫でです。
さきほどの記事とこちらの書き込みはスルーしていただくか、削除をお願いできますでしょうか?
お手数をおかけいたしますが、よろしくお願いします。
Posted by
小鳥遊 あゆむ小鳥遊 あゆむ
at
2011/10/25 03:54
ID
JDUtBiz2
はじめまして。
こちらのプラグイン、大変重宝して、利用させていただいております。
複数のブログで動かしていますが、同じ設定をしているにもかかわらず、謎の挙動が起こり、困っております。
個別記事のテンプレートの記事の下に、
    <a href="<$MTRecommendedEntryParam name="permalink"$>" title="<$MTRecommendedEntryParam name="title"$>"><$MTRecommendedEntryParam name="title"$></a>
というタグをリストで表示させています。
おすすめの記事のリンクの出力は、問題なくできています。
しかし、アンカーで挟んだ、<$MTRecommendedEntryParam name="title"$>が、なぜか、出力先の個別ページのタイトルで出力されてしまいます。
(title="~"の部分のタイトルのほうはマウスオーバーしてみると、きちんと、パーマリンクに対応したタイトルが出力されています)
キャッシュを削除するなど、思いつくことはやってみたのですが、解決しませんでした。
お忙しいとは存じますが、ご返答いただければ、幸いです。
Posted by
大感謝大感謝
at
2010/09/22 12:27
ID
689vjnF2
いつも重宝させていただいてます。
このプラグインをRSSフィードでも反映させたいのですが、
XML対応は検討されていますでしょうか?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。