CPAN で Net::MovableType なるモジュールを見つけました。
Sherzod Ruzmetov 氏作の Net::MovableType は MovableType の XML-RPC API のプロキシクラスで、これを使えば XML-RPC クライアントが手軽に書けるという代物。
#!/usr/local/bin/perl
use strict;
use warnings;
use Net::MovableType;
my $mt = new Net::MovableType('http://localhost/~naoya/mt/rsd.xml');
$mt->username('hoge');
$mt->password('foo');
my $blogs = $mt->getUsersBlogs();
for $b ( @$blogs ) {
print "id: $b->{blogid}", "\t", $b->{blogName}, "\n";
}
といった具合で MovableType のサポートしている Blogger API や metaWeblog API他 が扱えます。うーん良いですね。
MovableType.pm をちょっと覗いて見ましたが、XMLRPC::Lite を使って RPC メソッドをラッピングしているようです。XML-RPC API プログラミングの参考例にも良さそうです。
Net::MovableType のコンストラクタには mt-xmlrpc.cgi の URL あるいは RSD の URL を指定することができます。RSD の URL を指定した場合は、RSD の中から mt-xmlrpc.cgi の場所を引っ張ってくるようになっているようです。
この RSD のサポートと newMediaObject() というメソッドは siteAS の Atsushi Sano 氏によるもの、と CREDIT にありました。グッジョブ!
と、ここまでは良いのですが一つ問題点がありまして、やはり日本語絡みです。
MovableType の XML-RPC API を実装しているモジュールの MT::XMLRPCServer はどうやらその応答の XML ドキュメントを encodings="UTF-8" として返却します。返却されたドキュメントは
Net::MovableType → XMLRPC::Lite → SOAP::Lite → XML::Parser (あるいは XML::Parser::Lite)
と渡されてパースされるわけですが、XML::Parser は XML 宣言の encodings を見て文書の内容を判断します。
MT::RPCServer からの返却地は encodings="UTF-8" としながらも、実際のテキスト要素にはインストール時の文字コードを使うみたいなので EUC にしている僕の環境では、日本語が含まれた返却値に対して XML::Parser がパースエラーを吐いてしまいました。
MT::XMLRPCServer を修正して、返却値を正しく UTF-8 でエンコードしてやれば良さそうです。が、なんかあちこちあってどこをどう直せばいいやら。むが。
ちなみに Net::Blogger ってのもあるみたいです。