この記事の内容は、時間経過およびプログラムやシステムのバージョン アップなどの事情によって、現状に正しくそぐわない内容、またはそれどころか、場合によっては問題を引き起こす可能性があります。参考程度に留め、関連記事やアーカイブを検索してみてください。
Google の PageRank について見て回っていたところ、
最速インターフェース研究会の記事に
被リンクやトラックバックなんかをページランクでソートできたら面白いんじゃないかと思ってみたり。
との発言が。 …と言うわけで早速、作ってみました。
MovableType のプラグインとして動作しますが、
サイトが PHP 化されている必要があります。
PHP 化=ダイナミックパブリッシング
のことではありません。
ここでは各ページの拡張子が .php になっていれば問題ないと思います。
使用許諾条件など
背景
MovableType では
トラックバックを受信日時順で並び替えることしかできません。
しかし数ある
トラックバック先の中から有用と思われるページを目立つように表示できれば、
ビジタが良い記事に巡りあうチャンスを少しでも増せるように思えます。
有用な
リンクが膨大な
トラックバックのリストに埋もれてしまうのは勿体無いことです。
ところで、
Google の人気の秘密にその
検索精度の高さが挙げられます。
有用な
情報を含むページが自然と
検索結果の上位に表示されるようになっており、
これを実現する
技術の一つに
PageRank と呼ばれる仕組みがあります。
PageRank が高いページ=有用なページであるとは完全には言えないまでも、
やはりそれなりにページの有用性を測る尺度として活用できるのではないでしょうか。
この Google PageRank を取得できる MovableType プラグインとして、
drk7.jp で公開されている
MTGooglePageRank があります。
しかし現状のところ、PageRank を取得する URL が固定されてしまうことと、
再構築のタイミングでしか PageRank が取得されないという点で上手く使えません。
またトラックバックについて言えば、多くのブロガは、
記事を新規作成→公開するタイミングでトラックバックを送信するでしょうから、
公開されたばかりの記事 URL に対して PageRank を取得しようとしても意味がありません。
そこで、今回、PHP を使用して PageRank を表示するプラグインを作ってみました。
ページが表示されるタイミングでキャッシュ済みの PageRank を表示し、それに基づいてリンクを動的に並び替えることができます。
PageRank はキャッシュに保持しているので、表示のたびに Google に問い合わせる無駄を省いています。
キャッシュされた PageRank は意図したタイミングで最新のものに更新できます
動作の概要
- PageRank の表示
-
キャッシュファイルには URL と PageRank のリストが保存されています。
ページが表示される段階で、キャッシュファイルから指定された URL に対する PageRank を探します。
目的の URL がキャッシュファイルにあった場合、記録されている PageRank を表示します。
目的の URL がキャッシュファイルになかった場合、次回の更新時に PageRank を取得するよう、
キャッシュファイルに URL を書き加えます。
- PageRank の取得・更新
-
URL に対する PageRank を取得・更新する別プログラム(CGI)が実行されると、
以下の順番でキャッシュファイルのリストの内容を更新します。
- PageRank 未取得の URL があった場合、Google サーバに問合せを行い PageRank を取得します
- 以前に PageRank を取得してから、一定期間以上経過した URL について、Google サーバに問合せを行い PageRank を更新します
このプログラムを cron などを利用して、自動で実行されるようにしておくことで、
キャッシュファイル中の PageRank を最新に保つことができます。
導入方法
- アーカイブに含まれるファイルを全て、
MovableType の plugins ディレクトリ以下にコピーします
- GooglePageRank.pl をエディタで開き、
キャッシュファイルのパスを適切に書き換えます。
my $db_path = '/home/pass/to/your/cache/file/db-index.txt';
- db-update.cgi をエディタで開き、
キャッシュファイルのパスを適切に書き換えます。
;### PageRank データベースファイルを指定します。
use constant INDEX_DATABASE => '/home/pass/to/your/cache/file/db-index.txt';
GooglePageRank.pl と db-update.cgiで指定するキャッシュファイルは、どちらも同じパスを指定してください
- db-update.cgi には実行権限(755 or 777)を与えておきます
- db-update.cgi は以下の CPAN モジュールを使用しています。
必要な場合は併せて導入してください。
なお、動作確認は以下の環境で行っています。
任意の URL の
PageRank を表示するには
<MTGetGooglePageRank> コンテナタグを使用します。
また
<MTGetGooglePageRank> を使用する
テンプレートには、
忘れずに
<MTUseGooglePageRank> タグを書き加えておく必要があります。
以下は、エントリに送信された
トラックバックの一覧を、それぞれ記事への
リンクと
PageRank に応じた画像で表示する例です。
<$MTUseGooglePageRank$>
<ul>
<MTPings>
<li>
<img src="pagerank<MTGetGooglePageRank><$MTPingURL$></MTGetGooglePageRank>.gif">
<a href="<$MTPingURL$>"><$MTPingTitle$></a><br />
</li>
</MTPings>
</ul>
リストアイテムなどを
PageRank によって並び替えて表示するには、
<MTGPRPrepareContent> コンテナタグ、
<MTGPRPrepareContentParam> コンテナタグ、
<MTGPRContentLoop > タグを使用します。
以下は、エントリに送信された
トラックバックのうち、
PageRank が高いものから順に 5 件だけ、
それぞれ記事への
リンクと
PageRank に応じた画像で表示する例です。
ちょっとややこしいですが、オマジナイとして見て下さい(^^;)ゞ
<$MTUseGooglePageRank$>
<ul>
<MTPings>
<MTGPRPrepareContentParam><$MTPingURL$></MTGPRPrepareContentParam>
<MTGPRPrepareContent>
<li>
<img src="pagerank<MTGetGooglePageRank><$MTPingURL$></MTGetGooglePageRank>.gif">
<a href="<$MTPingURL$>"><$MTPingTitle$></a><br />
</li>
</MTGPRPrepareContent>
</MTPings>
<$MTGPRContentLoop count="5"$>
</ul>
ここではトラックバック先ページの PageRank が高い順にアイテムを表示しています。
他にも自分のブログのエントリを PageRank の高い順に並べてオススメ記事一覧を作ったりできます。
$MTUseGooglePageRank$
-
以下に続くテンプレートタグの動作に必要な前処理を行う変数タグです。
そのため、各テンプレートファイルの先頭あたりにでも、必ず 1 度だけ記述してください。
オプション等の指定はありません。
MTGetGooglePageRank
-
指定された URL の PageRank をキャッシュから取得し表示するためのコンテナタグです。
このコンテナタグの内部には http:// から始まる任意の URL を記述することができます。
そのため
<MTBlogURL>
や、
エントリアーカイブ中で <MTEntryPermalink>
を利用して、
URL を持つあらゆるページの PageRank を取得することができます。
PageRank が取得できると、このコンテナタグは 0 から 10 の値を返します。
指定された URL がキャッシュファイルにない場合は何も返しません。
オプション等の指定はありません。
MTGPRPrepareContentParam
-
MTGPRPrepareContent
に対応する URL を指定します。
ここで指定された URL から PageRank を取得し、
その URL に関連付けられたリストアイテムなどのコンテンツを
MTGPRPrepareContent
で準備します。
オプション等の指定はありません。
MTGPRPrepareContent
-
後述の
$MTGPRContentLoop$
で
並び替えに使用されるアイテムを準備するためのコンテナタグです。
この段階では、コンテナタグの内容はまだ表示されていません。
MTGPRPrepareContentParam
と必ずセットで使います。
オプション等の指定はありません。
$MTGPRContentLoop$
-
MTGPRPrepareContent
で準備しておいたコンテンツを、
PageRank に従って並び替えて表示するためのタグです。
以下のオプションが指定できます。
count
- 表示するアイテムの最大数を指定します。指定がない場合は最大で 65536 個まで表示します。
offset
- 最初の offset 個のアイテムを飛ばしてからアイテムの表示を開始します。指定がない場合は最初のアイテムから表示します。
sort_order
- アイテムの並び替える順番を
ascend
(昇順)
または descend
(降順)で指定します。
指定がない場合は降順(PageRank が高いものから順)で表示します
GooglePageRank.pl にはキャッシュファイルを参照して、
指定された URL の
PageRank を表示するだけの機能しかありません。
実際に
Google に問合せを行い URL の
PageRank を取得する処理は db-update.cgi が行っています。
そのため、キャッシュファイルの
PageRank のリストを最新に保つためには、
定期的に
db-update.cgi を実行してやる必要があります。
トラブルシューティング
- 今この瞬間の PageRank が知りたいのですが
- PageRank が分単位秒単位で変化する値でもないので、ほとんど意味がありません。
加えて、あまり頻繁に問合せると Google 先生に怪しまれれないかと心配です。
- いつまで経っても MTGetGooglePageRank が動作しません
- db-update.cgi を使ってキャッシュファイルを更新してください。
- 私のサーバは cron が使えないのですが
- 申し訳ありません。今の私にはこれが限界です。
- db-update.cgi を実行する頻度はどれくらいが適切でしょうか?
- サイト規模と問合せる URL の数にもよりますが、PageRank がそれほど頻繁に変化するものでもないことから、数日間隔で問題ないと思われます。
この間隔が長いと新着 URL の PageRank 取得が遅れますが、だからと言って数時間おきに実行するのはかなり無駄です。
- db-update.cgi でエラーが出ます
- flock 命令が悪さをしているかも知れません。機会を見て対応したいと思います。
ダウンロード