この記事の内容は、時間経過およびプログラムやシステムのバージョン アップなどの事情によって、現状に正しくそぐわない内容、またはそれどころか、場合によっては問題を引き起こす可能性があります。参考程度に留め、関連記事やアーカイブを検索してみてください。
Amazon などで『この商品を買った人はこんな商品も買っています』という案内をご覧になったことがあると思います。ユーザの購買動向を分析することで関連商品を推薦(リコメンド)してくれる機能で、その絶妙なチョイス(?)に釣られて他の商品ページに寄り道してしまう方も多いのではないでしょうか?
そこで、ブログなどでもこれを真似て『この記事を読んだ人はこんな記事も読んでいます』なんてナビゲーションが作れると面白いかもしれません。RecommendedEntry は、過去の訪問者が辿った記事の傾向を集計して、簡易的な記事リコメンデーション機能を実現するための MovableType プラグインです。
ビジタの動向データの集積と集計に PHP を使用しています。ご利用のサーバで PHP が使用でき、かつ RecommendedEntry をご利用の予定のブログの個別記事ページで PHP が動作する必要があります。
RecommendedEntry プラグインは、個別記事ページにユーザ追跡のためのコード片を埋め込みます。ユーザが個別記事ページを閲覧する度に、ユーザがどのような順番でページを渡り歩いたのかを集積し、このデータを集計することで記事間のユーザの移動状況を求めることができます。ユーザ追跡にはブラウザの Cookie を使用していますが、あくまで任意のユーザの記事間の移動を追跡することが重要であって、ユーザを個々に限定・追跡することが目的でがありません。
また、記事リコメンデーションの精度についてですが、ユーザ嗜好や記事内容の関連性のクラスタリングと云ったリコメンデーションで多用される技術は全く使われていません。個々のユーザが現在閲覧している記事を基点としたユーザの移動をデータとして集計し、多いものから順に表示するだけの非常に好い加減かつお遊び的なものであることを了承ください。
少し手順が複雑ですが、気合で(ぇー
ダウンロードしたアーカイブを展開します。MTRecommendedEntry.pl というファイルが一つだけ現れるので、MovableType のインストールフォルダにある plugins にコピーしてください。その後、MovableType の管理画面から[プラグイン]と移り、RecommendeEntry プラグインが表示されていることを確認します。
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); }?>
次に、RecommendeEntry プラグインが集計したユーザ動向のデータファイルを保存するためのディレクトリを作成してください。データファイルには個人情報が含まれるわけではありませんが、気になる人はドキュメントルート以外に作成されることをオススメします。作成したディレクトリの絶対パスを控えておいてください。
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$
タグtemplate
[必須*]index
が必須です。 両方の指定がある場合、index
による指定が優先されます。index
[必須*]template
が必須です。 両方の指定がある場合、template
による指定を上書きします。datapath
[必須]cookie_expire
cookie_name
mtrcmnd_eid
です。 既存の Cookie と名前が衝突する場合には変更してください。MTRecommendedEntries
コンテナタグmode
offset
offset
位を表示しません。デフォルト値は 0 です。
count
offset
で指定された順位から count
件だけ表示します。デフォルト値は 10 です。$MTRecommendedEntryParam$
タグMTRecommendedEntries
コンテナタグの中で使用します。
name
[必須]name
で指定されたパラメータを表示します。
MovableType のテンプレートタグのようですが、実際には小さな PHP コード片を生成します。 そのため、テンプレートタグで有効なグローバルフィルタなどは使用できません。 name
に指定できるパラメータには、エントリ一覧用インデックステンプレートで記述されたパラメータに加えて、 流入数または流出数を示す count
が常に使用できます。name
パラメータには title と permalink を指定することができます。 例えばあなたが記事の作成された日付と投稿者名も表示したいと思うならば、エントリ一覧用インデックステンプレートを以下のように修正し(一部抜粋)、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α> の <流入カウントα> として記録されます。
master
) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。
寄せられたコメント (全 42 件中、最新 5 件まで表示しています)
GADGET 応用 ~ この記事を読んだ人はこんな記事も読んでいます
http://www.magicvox.net/archive/2012/05101454/
"Warning: Cannot modify header information - headers already sent by ***"のエラーが表示されます。
PHPは、5.4.7です。
どうすればこのエラーを回避できますか?
先ほど、こちらに、質問のコメントをさせていただいたものです。
さきほどの件ですが、大変、お恥ずかしいのですが、こちらの凡ミスで、自己解決しました。
そのため、ご返答いただかなくても、大丈夫でです。
さきほどの記事とこちらの書き込みはスルーしていただくか、削除をお願いできますでしょうか?
お手数をおかけいたしますが、よろしくお願いします。
こちらのプラグイン、大変重宝して、利用させていただいております。
複数のブログで動かしていますが、同じ設定をしているにもかかわらず、謎の挙動が起こり、困っております。
個別記事のテンプレートの記事の下に、
<a href="<$MTRecommendedEntryParam name="permalink"$>" title="<$MTRecommendedEntryParam name="title"$>"><$MTRecommendedEntryParam name="title"$></a>
というタグをリストで表示させています。
おすすめの記事のリンクの出力は、問題なくできています。
しかし、アンカーで挟んだ、<$MTRecommendedEntryParam name="title"$>が、なぜか、出力先の個別ページのタイトルで出力されてしまいます。
(title="~"の部分のタイトルのほうはマウスオーバーしてみると、きちんと、パーマリンクに対応したタイトルが出力されています)
キャッシュを削除するなど、思いつくことはやってみたのですが、解決しませんでした。
お忙しいとは存じますが、ご返答いただければ、幸いです。
このプラグインをRSSフィードでも反映させたいのですが、
XML対応は検討されていますでしょうか?