あるNucleusサイトでblogpetを導入したいと相談されたので、早速blogpetのヘルプを調べてみると「BlogPetに対応しているBlogはどれですか?」の項目にNucleusは「機能は全て使えると思われるが、確認できていないもの」というステータスで掲載されていました。
この意味深なステータスの謎を解くために早速テストをしてみると、テスト投稿に失敗したという表示が。xmlrpc(metaWeblog.newPost)経由なのでトラブルなく接続されるだろうと思っていたのですが、僕の考えが甘かったようです。
† 困ったときはフォーラムで
とりあえずなにかヒントがないかなぁとフォーラムを探ってみるとビンゴと思われるスレッドを発見。いつもお世話になっているまみおさんのフォローによると以下のような改造が必要になるようです。
Nucleus(JP)フォーラム :: トピックを表示 - こうさぎ
同じ修正をするならば、
nucleus/xmlrpc/api_metaweblog.inc.php
の、20行目~31行目みたいですね。
// metaWeblog.newPost $f_metaWeblog_newPost_sig = array(array( // return type $xmlrpcString, // itemid of the new item // params: $xmlrpcInt, // blogid $xmlrpcString, // username $xmlrpcString, // password $xmlrpcStruct, // content $xmlrpcInt, // publish boolean (set to false to create draft) ));みたいに修正するような。
この部分オリジナルは下記のようになっているので、paramsの1番目と5番目をxmlrpcIntに書き換えればよいだけみたいです。Nucleusのステータスが「機能は全て使えると思われるが、確認できていないもの」というようになっている原因はどうやら改造が必要であるということに起因しているようです。
上記部分のオリジナル
† ところがうまくいかない
予想に反してこれでもうまくいきません。いろいろ調べた結果5番目のparamsはxmlBooleanのままでOKなようです。おそらくまみおさんのコメントの時*1からは仕様が変わっているみたいです。
動作確認済みのソース
これで無事に動作確認をすることができました。
† どちらが標準に準拠してないの?
以前にMTのmetaWeblog.newPost()にはまるでインタフェイスはしらべたことがあったのですが、その際にはこのように記載されていました。
プログラミングインターフェイス(原文)
metaWeblog.newPost
機能; 新しい投稿を作成し、任意で公開します。
パラメータ: String blogid、String username、String password、struct content、boolean publish
返り値: 成功すると新しい投稿のString postid、失敗するとfault
Nucleusもこれと同じように実装されているので、これはblogpet側の実装ミスであると思われるのですが、どうなんでしょうか。それともNucleusやMTが標準から外れたことをしているんでしょうか。
やっぱりシステム間接続は一筋縄ではいきませんね。。。。
http://japan.nucleuscms.org...
にこの記事へポインタ貼っておきました。
stringをintにするとか、(以前はbooleanをintにする)とか、何でそんなことしなくちゃいけないんでしょうね。
さすがにbooleanをintにするのはまずいと気付いたんですかね?
ありがとうございます。
まみおさんのレスも一年以上前のものですよね・・・・・誰かにツッコミ入れられたなら両方とも直ってもいいような気がするんですけどね。
自分も先日 BlogPet 入れようとしたとき、例のファイルを BlogPet用に改造したんですが、今度はubicast Blogger などのツールから更新できなくなったので、2パターンファイル用意して対応しました。ってかそういう記事をどこかでみつけて、なんとか1つにできんもんか?もしできたらコアにつっこんでリリースじゃ!って思ってたんですが途中で諦めました ^^;
僕のいじっているところは、外部からのxmlrpcツールをほかに使っていないので、ファイルは1パターンだけにしてしまったんですが、そういう場合もあるんですね。
xmlrpcsのsignitureをセットしなければ、verifySignature()が呼ばれないようなので、(signatureが検証されないけれども)結果的に両方対応になるという、ちょっと荒業も作ったんですが気持ちが悪いので却下しました。もうちょっとまともな方法としては、ipアドレスとか、UAから判断して使うsignatureを切り替えるのが落としどころでしょうか。
根本的にはxmlrpcsでメソッドがオーバーロードできるようなメカニズムが実装されるといいんですけどねぇ。。。。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。