TOP
>
Movable Type
>
Movable Typeに直接エントリーを投稿するCGI
Movable TypeにCGIから直接エントリーを投稿する方法です。
ソース
#!/usr/bin/perl -w
sub BEGIN {
my $dir;
require File::Spec;
if (!($dir = $ENV{MT_HOME})) {
if ($0 =~ m!(.*[/\\])!) {
$dir = $1;
} else {
$dir = './';
}
$ENV{MT_HOME} = $dir;
}
unshift @INC, File::Spec->catdir($dir, 'lib');
unshift @INC, File::Spec->catdir($dir, 'extlib');
}
use MT::Entry;
use MT::Placement;
my $mt = MT->new or die MT->errstr;
my $entry = MT::Entry->new;
$entry->blog_id(1);
$entry->author_id(1);
$entry->status(MT::Entry::RELEASE());
$entry->title('タイトル');
$entry->text('本文');
$entry->authored_on('2008-03-29 22:04:56');
$entry->save or die $entry->errstr;
my $place = MT::Placement->new;
$place->entry_id($entry->id);
$place->blog_id($entry->blog_id);
$place->category_id(7);
$place->is_primary(1);
$place->save or die $place->errstr;
print "content-type: text/html\n\n";
print "entry posted!!";
解説
まずsub BEGINで関連ライブラリを読み込み、
use MT::Entry;
use MT::Placement;
利用するモジュールを指定します。
エントリーの投稿ならMT::Entry、カテゴリーを指定する場合はMT::Placement;も読み込みます。
my $mt = MT->new or die MT->errstr;
my $entry = MT::Entry->new;
$entry->blog_id(1);
$entry->author_id(1);
$entry->status(MT::Entry::RELEASE());
$entry->title('タイトル');
$entry->text('本文');
$entry->authored_on('2008-03-29 22:04:56');
$entry->save or die $entry->errstr;
MT::Entry->newでエントリーオブジェクトを生成して、各項目を設定していきます。
タイトルと本文、投稿日を指定したい場合は、authored_onを利用して入れていきます。
これだけでエントリーの投稿は完了です。
my $place = MT::Placement->new;
$place->entry_id($entry->id);
$place->blog_id($entry->blog_id);
$place->category_id(7);
$place->is_primary(1);
$place->save or die $place->errstr;
カテゴリーも同時に指定する場合はMT::Placementを利用してcategory_idに指定したいカテゴリーのIDを指定します。
使い方
単純に1件のデータを入力する場合は、普通に管理画面から投稿したほうが早いですが、複数のデータをまとめて挿入する場合や、他のWEBサイトのデータをスクレイピングして挿入する場合など、プログラミングをゴリゴリ書いたほうが効率よい場合に重宝します。
関連エントリー
ダイナミックパブリッシング環境でSortCatFldプラグインを利用する。
MTのテンプレート開発で再構築を不要にするfastDevelopmentプラグイン
MTでopモディファイアを利用して複雑なレイアウトを行う
MTカスタムフィールド画像を見えるようにする(推奨)
Movable Typeの再構築 高速化いろいろ