Mar 26, 2006

MT 3.2のAtom API

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属性を落とすという修正方法を採っています。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com