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

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

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

この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

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

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

動作環境

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

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

動作概要

動作概要図

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

導入方法

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

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

1.の導入

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

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

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

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

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

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

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

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

追加されるタグ

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

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

 RecommendedEntry が利用するユーザ動向が集積されたデータファイルについて説明します。 MTUseRecommendedEntry タグの datapath パラメータによって指定されたディレクトリ以下に、 <記事 IDα>.txt というファイル名で記事毎にテキスト形式のデータファイルが生成されます。  <記事IDα> の記事には <記事IDβ> から <流入カウントβ> の訪問があり、 <記事IDα> の記事からは <記事IDβ> <流出カウントβ> だけユーザが移動したことを示します。 初めてサイトを訪問するユーザや、Cookie の有効期限が切れたユーザが <記事IDα> を訪問した場合、 同じ <記事IDα> の <流入カウントα> として記録されます。

困った時は

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


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

その他の関連する記事


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

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

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

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

Posted by
bunta
at
2008/05/26 09:05
ID
ITNPmpeY

記事を読んでいただいて、ありがとうございました。
ぴろりさんに記事を読んでいただけるとは、かなり嬉しいです!

このほかにもプラグインをいくつか導入予定なので、これからも
よろしくおねがいします。ありがとうございました!

Posted by
ぴろり ◆OLEEi.VOX.
at
2008/05/23 14:54
ID
fi2taM5Q

こんにちは。
記事拝読させていただきました。画像付きで詳細な手順を解説されていて,非常に読みやすく,理解もしやすかったです。
プラグインの導入の際には皆様に是非読んで頂きたいですね。
ありがとうございました!

Posted by
bunta
at
2008/05/22 14:20
ID
KGyKBCBE

始めまして、WEBデザインストックを運営している、buntaと申します。
今回RecommendedEntryプラグインについてブログを書かせていただき、
勝手ながらトラックバックさせていただきました。

RecommendedEntryプラグインのような機能のプラグインを毎晩暇があったら
検索で探していました、発見したときは本当に嬉しかったです。
しかし導入が難しそうなのとバージョンが3.33で動作とありましたので
4.1では、動作しないかも、と思い導入しないでいました。


あきらめきれず、思い切って導入をしてみると意外と簡単でMovableType 4.1
でもスムーズに導入することができました。
すばらしいプラグインを制作していただきありがとうございます。

勝手ながらOpen MagicVox.netさんのサイトを当ブログにリンクさせて
いただきました。これからもよろしくおねがいいたします。

Posted by
mnb
at
2007/03/02 14:45
ID
nhJIFg5A

無事に設置することができました!ありがとうございます!

Posted by
ぴろり ◆OLEEi.VOX.
at
2007/03/02 11:16
ID
rP.Scl52

こんにちは。
データファイルの保存先に指定したディレクトリ(datapath)にCGI/PHPのための書き込み権限を与えて試してみて頂けますか?
それが原因で1行目で警告されていて,その警告が原因で(?)2行目の警告が発生しているようです。

コメントを投稿する

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

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