August 13, 2003

MovableType Perl API で遊ぶ

[ Movable Type , Perl ]

MovableType の Perl モジュールはオブジェクト指向設計によって高度にカプセル化されていて、それらの提供するメソッドを使うと結構色々遊べます。

例えば、データベースに格納されている全ウェブログのタイトル一覧と、エントリ一覧を取得する場合以下のようなコードになります。

 1  #!/usr/local/bin/perl
 2 
 3  use strict;
 4  use warnings;
 5 
 6  # MovableType ライブラリへのパス
 7  use lib qw (/some/where/mt/lib /some/where/mt/extlib);
 8 
 9  use MT;
10  use MT::Blog;
11  use MT::Entry;
12  use Jcode;
13 
14  eval {
15     my $cfg_file = "/mt.cfg";
16     my $mt_path = "/some/where/mt";
17 
18     my $mt = MT->new( Config => $mt_path . $cfg_file, 
19                       Directory => $mt_path );
20 
21     # ウェブログ一覧
22     my @blogs = MT::Blog->load(undef, 
23                           {direction => "descend", unique => 1});
24     for my $blog (@blogs) {
25        print $blog->name, "\n";
26     }
27  
28     # エントリ一覧(10件)
27     my @entries = MT::Entry->load(undef, 
29                              {unique => 1, limit => 10});
30     for my $entry (@entries) {
31        print Jcode->new($entry->title)->euc, "\n";
32     }
33  }; if ($@) {
34     die;
35  }

実際のデータは PostgreSQL に格納されていますが、DBI などを使用せずに MovableType のモジュールのメソッドのみで簡単にアクセスしてます。ここでは参照処理だけを行ってますが、ユーザの権限を操作したり、ウェブログの各種設定を操作したりするメソッドも全て用意されているので、凝ったことをしようと思えば色々できそうです。

このコードの肝は、18 行目。MT インスタンスを生成していますが、実際にはそのインスタンスは使っていません。しかし、この行がないと正常に処理ができません。子一時間以上悩みました。

MT クラスのコンストラクタでは、MT::Object->setObjectDriver というメソッドが呼ばれており、MT::Object->setObjectDriver メソッド内では、MT::ObjectDriver インスタンスを生成して、MT::Object のクラス変数でそれを保持しています。

MT::ObjectDriver は DBI や DBM などのデータベースドライバを抽象化し、ストレージへのアクセスを提供する DAO (Database Access Object)。コンストラクタに与えられた引数によって、実際にどのデータベースドライバとバインドするかが決まります。

MT::Object->setObjectDriver が呼ばれると、MT::Object に実際のストレージがバインドされます。MT::Blog や MT::Author などはエンティティオブジェクトで、この MT::Object を継承することでデータベースへのアクセスを更にラッピングしています。

とまあ、うだうだと人の書いたコードのうんちくを垂れてみましたが、実際には設定ファイルの名前とインストールパスを指定して MT インスタンスを生成した後に、各種エンティティを load してあーだこーだすれば色んな処理ができるという。

よくできてるなーと感心させられました。

Posted by naoya at August 13, 2003 09:38 PM | トラックバック (1)  b_entry.gif
トラックバック [1件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/345
use MT;
Excerpt: NDO::Weblog より「MovableType Perl API で遊ぶ」が面白そう。 MovableTypeライブラリはかなりキレイに出来ているようなので、まずはその中身をおべんきょうするところから。こうした記事がもっと出てこないかな。 Perlさわり続けて10年近くになって、Javaできないもんだ...
Weblog: Nightnoise::blog
Tracked: August 14, 2003 10:03 AM
コメント [1件]

たまにあるっすよ>18行目みたいな仕組み
newの戻りを変数で受けてるから、「あれ?このインスタンスどこで使うの?」みたいに思っちゃうよね。
こういうクラス変数の初期化処理のみっぽいものは、new以外のメソッド名にしてインスタンス返さないほうがいいよねー。

[1] Posted by: ooba at August 14, 2003 01:22 AM [返信]