MT 3.2のAtom APIがうまくないらしいという話を聞きました。
ここギコ!: MovableTypeのAtom APIって動いてます?(誰か助けてください)
ひとまず、Atomサービスの一覧のURLを修正すべく、以下のようにパッチをあててみました。
--- lib/MT/AtomServer.pm.bak Fri Mar 3 15:18:34 2006
+++ lib/MT/AtomServer.pm Sun Mar 26 20:57:15 2006
@@ -31,7 +31,6 @@
handle => \&handle,
);
$app->{default_mode} = 'handle';
- $app->{is_admin} = 1;
$app->{warning_trace} = 0;
$app;
}
このパッチ自体はこっち(MT_3_2_ja2_UO_Patch - ogawa - Google Code)にコミットしておきました。
BlogWrite自体使ったことがなかったのでよく分かりませんが、Endpointにhttp://www.example.com/mt-atom.cgi/weblogを指定して試してみました。私の試した範囲では、過去ログの取得機能がうまく動かないことを除けば、特に問題なく動いている様子です。
BlogWriteがC:\Program Files\witha\BlogWrite\api以下に出力しているログを見ると、get_postsには成功していることが確認できます。MTが返す結果がBlogWriteの期待する形式と違うのかもしれないなと思っているのですが、このあたりは他のAtomPP対応のサービスと比較してみないとよく分かりませんね。
ひとまず作者さまにトラックバックしておきます。
HepCat Dev and Test: BlogWrite 2.4.1.1公開
ところで、is_adminというフラグは、MTのアプリケーションURLを決定する際に、CGIPath、AdminCGIPathのどちらをベースURLとして利用するか判断する目的で用意されているものです。というかそう考えられます。CGIPathではhttpを、AdminCGIPathではhttpsをベースURLに指定したり、後者のPathにはBasic認証を施したりするのはreasonableでしょう。
AdminScript(mt.cgi)は後者であるべきなのは明らかですが、AtomScript(mt-atom.cgi)はどちらか判断が付きかねます。XMLRPCScript(mt-xmlrpc.cgi)は前者なのでAtomScriptも前者でよいというのが一つの考え方で、上記のパッチはそれに従ったものです。一方で、AtomScriptはAdminScriptと同様にMT CMSへのログインや制御を行うのでAdminScriptと同程度にsecureでなければならないというのがもう一つの考え方です。
だったら、$app->{is_admin}=1の状態で、$app->uri()を呼び出したらAdminCGIPathを使ったアプリケーションURLを生成して欲しいわけですが、実際にはAdminCGIPathを使ったAdminScriptのURLしか返しません。この点を修正したければ以下のようにするとよいでしょう。
--- lib/MT/App.pm.bak Fri Mar 3 15:18:34 2006
+++ lib/MT/App.pm Mon Mar 27 11:31:22 2006
@@ -1005,11 +1005,11 @@
sub uri {
my $app = shift;
- $app->{is_admin} ? $app->mt_uri(@_) : $app->app_uri(@_);
+ $app->app_uri(@_);
}
sub app_uri {
my $app = shift;
- $app->app_path . $app->script . $app->uri_params(@_);
+ ($app->{is_admin} ? $app->mt_path : $app->app_path) . $app->script . $app->uri_params(@_);
}
# app_uri refers to the active app script
sub mt_uri {
ただし、もし仮に「$app->{is_admin}=1の状態で、$app->uri()を呼び出したらAdminCGIPathを使ったAdminScriptのURLを返す」仕様に依存したアプリケーション・プラグインがあったとしたら正常に動作しないことになります。このため、MT_3_2_ja2_UO_Patch - ogawa - Google Codeでは、lib/MT/AtomServer.pmのis_admin属性を落とすという修正方法を採っています。
0 コメント:
コメントを投稿