2006.02.08

MovableType

定期的にMT全アーカイブを再構築自動化(全アーカイブ自動再構築スクリプト)

このBlogでは、各エントリーに最新エントリー情報を載せています。しかし実はエントリーを投稿するたびにBlog全体を再構築してやらないと、昔のエントリーのページにある最新エントリーリストは古いままであることに(いまごろになって)気がつきました。

JavaScriptで最新記事を読み込んでやるというのもGoodpicにありますが、定期的に全てを再構築してやる方法がないかなぁ〜(そっちのほうが再構築忘れがなくなって個人的には嬉しい)と探していると、インデックスだけを定期的に再構築するというスクリプトを発見。そのスクリプトを参考に、Blog全体(インデックスだけでもOKですし、エントリーページだけ、カテゴリーページだけなどの指定も可能です)を再構築するスクリプトに改造しました。

ブログ(MovableType)の個別ページに、Javascriptで最新記事を表示:Goodpic
MTのindex Rebuild自動化 :: Drk7jp

このスクリプトでは、スクリプト自身をMTのインデックステンプレートとして作成することで、エントリーが投稿される度に総エントリー数を書き換えることが可能になっていますので、スクリプトは必ずMTのインデックステンプレートとして作成して下さい。それではあなたのMTの管理画面を開きましょう。

まずはMTの管理画面にいって、テンプレートからインデックステンプレートの新規作成を行う。出力ファイル名を”../../rebuildAll.pl”とでもして、下記のソースをコピーして保存&再構築します。rebuildAll.plファイルは必ずブラウザでアクセスできないところに出力させるようにしてください。さもないとあなたのブログのユーザ名とパスワードが見られてしまいます。

#!/usr/bin/perl -X

package MT::RebuildAll;
BEGIN {
use vars qw($VERSION $FIX_CASE);
}

use strict;
use vars qw($VERSION);
use subs qw(exit);
*exit = $ENV{MOD_PERL} ? \&Apache::exit : sub { CORE::exit };
$VERSION = "1.00";

use Jcode;
use LWP::UserAgent;

my $MT_user="ユーザ名";
my $MT_passwd="パスワード";

## 下記が少し難しいです。
## http://my.host.com/path/to/mt.cgi
## にmt.cgiファイルがあるばあいは、下記のようにな
## ります。
## ("/"を忘れないようにしてください)
## Individual,Daily,Monthly,Category,indexの部分を
## 編集すれば、再構築の範囲を変更できます。

my $server = "my.host.com";
my @PATH = (
"/path/to/mt.cgi?__mode=rebuild&blog_id=<$MTBlogID$>&type=Individual,Daily,Monthly,Category,index&next=0&offset=&limit=20&total_entries=<$MTBlogEntryCount$>&is_bm=&entry_id=&is_new=&old_status=&username=".$MT_user."&password=".$MT_passwd,
);

my $i=0;
foreach my $path (@PATH){
my $url = "http://".$server.$path;
print "->Access: ".$url;

my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
my $result = $ua->request($request);

if($result->is_success){
print " -> OK\n";
if( open(OF, ">RebuildIndex.tmp") ) {
binmode OF;
print OF $result->content;
close(OF);
}
} else {
print " -> NG\n";
}
$i++;
}


赤文字の部分はあなたの環境に合わせて編集してくださいね。
あとはクーロンで
perl /path/to/rebuildAll.pl

/path/to/はあなたのBlogのindex.htmlがあるディレクトリです。


を定期的に実行するだけ。