2007年09月17日

[MT::Entry]特定のブログの記事一覧をロード

以下のコードは特定のブログの記事一覧をロードをする例。
この例では、blog_id=2 のエントリー一覧を「エントリーの投稿日時」の降順で配列としてロードしている。

use MT;
use MT::Entry;

#MTの初期化は必ず行う
my $mt = MT->new or "Failed to load mt";
my @entries = MT::Entry->load(
{ blog_id => 2 },
{
sort => 'created_on',
direction => 'descend',
}
);

foreach $entry ( @entries ) {
print "記事タイトル:" . $entry->title . "\n";
}

ちなみに load メソッドは MT::Object で宣言されているらしい。
MT::Entry は MT::Object を継承しているので、このメソッドを使用することができる。

http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_object.html
(参考:Movable Type オブジェクト・リファレンス MT::Object)

オブジェクトの読み込みには、一括して配列に読み込む方法(load)と、反復子を使って一つずつオブジェクトを読み込む方法(load_iter)があるそうだが、この点についてはまた後で時間があるときに試してみる。

各オブジェクト内のテキストデータのエンコーディング

試してみたところ、MT::* で生成した各オブジェクト内のテキストデータのエンコーディングはUTF?8で統一されているのかな。

とりあえず、MT::Entry のオブジェクトを load して title プロパティを表示してみたところ、エンコーディングは UTF-8 になっていた。

ちなみに私のシステムでは、データベースでは MySQL を使用し、エンコーディングは EUC-JP としている。

リファレンスのどっかにのっているかもしれないので、時間のあるときに探してみようかな。

MT::*クラスのクラスメソッドを使えるようにするため、最初に必要なこと

MT::* クラスのクラスメソッドを使用する場合、最初にMTクラスをnewしてmt-config.cgiを読み込み、初期設定を行うことでMTのAPIを使用できるようにする必要がある。

my $mt = MT->new or "Failed to load mt!";

この初期化処理を忘れてしまうと、当然のことながら MT::* クラスへの操作は行うことができない。