maildeblogですが、ちょっと正式公開前にとあるサーバに導入してみることにしました。
導入先のblogはMT-3.151-jaだったのですが、これまでほとんどNucleusでしかテストしていなかったせいか問題が発生してしまいました。XML-RPC経由で投稿すると必ず状態が「公開」になってしまうのです。API仕様にはboolean publishという属性があるのですが、どうやらこれが効いていない模様。
metaWeblog.newPost
機能; 新しい投稿を作成し、任意で公開します。
パラメータ: String blogid、String username、String password、struct content、boolean publish
返り値: 成功すると新しい投稿のString postid、失敗するとfault
ということで、いつものごとくソースを追いかけてみることにしました。
# MTはperlなのでこういうのが非常に助かります。
† ソース中にだけコメントで書くのやめてくれ
ソースを追いかけてみると意外な事実が判明。
(MTdir)/lib/MT/XMLRPCServer.pm
## In 2.1 we changed the behavior of the $publish flag. Previously,
## it was used to determine the post status. That was a bad idea.
## So now entries added through XML-RPC are always set to publish,
## *unless* the user has set "NoPublishMeansDraft 1" in mt.cfg, which
## enables the old behavior.
っていうか、ソース中にコメントだけでこういうの書くのやめてくれ。
なんでbad ideaなのか理由も書いてないし。
† ぼやきモード
ドキュメントには「任意で公開(optionally publishes it)」って書いてあるから、これって明らかに仕様変更なんだけど、ソース追いかけないとそれがわからないんじゃドキュメントの意味がないじゃん。
プログラミングしてるとこんなん日常茶飯事ですが、やっぱり困りますね。
とりあえず今回はmt.cfgに「NoPublishMeansDraft 1」と書いてしのぐことにします。
書いてみたら、あっさりと直りました。ふぅ。
metaWeblog.newPost した後に mt.publishPost すれば、ちゃんと publish されます。MovableType は設定いじって
NoPublishMeansDraft 1
ってことができますが、TypePad系(ココログとか)はいじれないので、metaWeblog.newPost + mt.publishPost でしのいでいます。
tsupoさん
アドバイスありがとうございます。mt.publishPostってそういうことなんですね。
ツール作りはじめたときには簡単にできるのかなと思っていたんですけど、やっぱりXML-RPCもシステム間連携なんで、仕様の解釈の問題はどうしても避けて通れないですね。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。