今、ColdFusion+XML-RPCなアプリをブンブン回しているんですが、MovableTypeのXML-RPCインターフェースを使ってBlogを新規でエントリする場合、そのエントリを「下書き」として追加したければpublishを0にしなければならないんです。
で、0にしてリクエストを投げる。
でも、管理画面上では「公開」としてエントリされてしまっている。なんですかこれ。
検索してみたところ、MovableTypeのXML-RPCインターフェースはmetaWeblog.newPostリクエストのpublishの値は無視するらしいとのこと。
しかし実際には無視しているのではなくて、publishが0の時はエントリしても再構築をしない、それ以外の時は再構築をするって言う動作になっている。
なので、管理画面上では公開状態になって再構築されていない「一触即発エントリ」がザクザクと出てくることになってしまって、ついうっかり再構築ボタンなどを叩いてしまったら、溜まりに溜まっている一触即発エントリがエクスプロージョンよろしくガンガンと公開されていってしまうことになってしまう。
何でこんな仕様になっているかハッキリしたことはわからないけど、metaWeblog.newPostしたエントリを後で料理する際に便利なのかなーとか思ったりした。
たとえば何十ものエントリを一気に処理したい場合、いちいち再構築していては、時間がかかって仕方がない。そこで、下書きだけど再構築すれば公開できるような状態としておくことで、大量のエントリのリクエストが終わった段階で再構築のリクエストを出せば、まとめて公開できてしまう。
そういった意味で便利なのかなと。
また、MovableTypeのXML-RPCインターフェースはmetaWeblog.newPostする際、カテゴリーを設定できなかったりする悲しい仕様でもある。そのため、一旦下書きとしてエントリしておいて、得られた記事idで今度はカテゴリ設定のリクエストを投げるという二段構えで攻めなければならない。
面倒だねこれ。
XML-RPCインターフェースを直接書き換えてちゃんと下書きとしてエントリできるように改造してみたかったけど、perlをいじるスキルに一抹の不安を覚えるので、とりあえず、metaWeblog.newPostのリクエストに成功した際に得られる記事idをキーにしてデータベースを更新するような仕様にしてみた。
mt.cfgを書き換えて、全部下書きとする方法もあるけど、複数Blogを運用してる場合、これだったら他のBlogにも影響してしまうので却下。
今のところちゃんと動いてくれてるけど、後々何か問題が出ないかちょっと心配。