MTOS5のリビルドをシェルスクリプトで実現するにはどうすれば良いでしょう。MTOS4と同じようにできないか調べてみました。
「Movable Type オブジェクト・リファレンス – MT::WeblogPublisher」を使えばいいのは確かです。ということで、/var/www/mtos にMTOS-5.2.3をインストールしたとして、ブログID:1、エントリID:1の記事をリビルドするときには次のようなスクリプトを用意して実行すればできます。生成されるファイルがスクリプトの実行ユーザによるものになるので、環境によってはchown, chconといったコマンドで生成後に調整をする必要があります。
#!/usr/bin/perl
use strict;
use warnings;
use constant MT_DIR => '/var/www/mtos';
use lib ( MT_DIR . '/lib', MT_DIR . '/extlib' );
use MT;
use MT::Blog;
use MT::Entry;
binmode(STDOUT, ":utf8");
my $mt;
BEGIN {
$ENV{'MT_HOME'} = MT_DIR;
$mt = MT->new(
Config => MT_DIR . '/mt-config.cgi',
Directory => MT_DIR,
);
}
my $entry_id='1';
my $blog_id='1';
my $entry = MT::Entry->load(
$entry_id
);
$mt->rebuild_entry(
Entry => $entry
);
ちなみに、$entryがきちんとloadできているかを確認するには、次のようなプログラムを用意するといいでしょう。
#!/usr/bin/perl
use strict;
use warnings;
use constant MT_DIR => '/var/www/mtos';
use lib ( MT_DIR . '/lib', MT_DIR . '/extlib' );
use MT;
use MT::Blog;
use MT::Entry;
binmode(STDOUT, ":utf8");
my $mt;
BEGIN {
$ENV{'MT_HOME'} = MT_DIR;
$mt = MT->new(
Config => MT_DIR . '/mt-config.cgi',
Directory => MT_DIR,
);
}
my $entry_id='1';
my $blog_id='1';
my $entry = MT::Entry->load(
$entry_id
);
print $entry->title;
print $entry->blog_id;
全ビルドは下記でできます。エントリごとにタイトルを表示するコールバックを登録して実行しているので、再構築ができたエントリをコンソール上で確認することができます。
#!/usr/bin/perl
use strict;
use warnings;
use constant MT_DIR => '/var/www/mtos';
use lib ( MT_DIR . '/lib', MT_DIR . '/extlib' );
use MT;
use MT::Blog;
binmode(STDOUT, ":utf8");
my $mt;
BEGIN {
$ENV{'MT_HOME'} = MT_DIR;
$mt = MT->new(
Config => MT_DIR . '/mt-config.cgi',
Directory => MT_DIR,
);
}
my $blog_id='1';
$mt->rebuild(
BlogID => $blog_id,
EntryCallback => sub { print $_[0]->title, "\n" },
);