APR
12

WP-XML-RPCLib2

Published:2009-04-12 12:07:40 UTC

image 今日はWordCamp Tokyoですね。自分も参加していて、WordPressの開発者、Matt Mullenwegによる基調講演を聴き終わり、今昼飯を食べながらMattへの質問を考えているところです。いや~P2(WordPress Prologue)は初めて知ったのですが、WordPressをtwitterクローンに出来るWPテーマだそうで、結構期待したいですね。

さて、WordPressといえば前にWordPressのXML-RPC APIを叩くための.netのライブラリを作ったものの、呼び出しの書き難い状態のままで放置していて、まずい状態だなぁということで、一念奮起して一から書き直してみました。今度はLINQ to XMLを使って書き直し。前のに比べたらソースコードもすっきりして、使いやすく、またメンテし易くなったかと思います。(ただ、XML-RPCの値を表すクラスをバリューオブジェクトとして実装したのは設計としてちょっと失敗だったかもしれません。。。)

SharpLab.XML-RPCLib2.zip

前のバージョンと同じく、XML-RPCを使うための汎用ライブラリと、それを利用して実装したWordPressのXML-RPC API操作用のライブラリ、及びそれらのCompact Framework版を用意しています。

APIを通じたBlog操作の自動化はなかなか面白いものですので、一度お試しいただければと思います。

Comments :3

中山卓司 09-05-22 17:24:36 UTC

 ある事にハマって、久しぶりに寄らせて頂きました。

 LINQ To XMLで書き換えられたそうで、ソースがスッキリしましたね。ありがたく使わせていただきます。

 で、ハマっていたのは、
 
 Aと言うServerのMTにはXML-PRC経由でAPI操作が可能(日本語変?)しかし、同じバージョンでもBと言うServerではエラーになりました。

 Serverのせいと投げ出しても良かったのですが、Firefoxの拡張機能のScribefoxだとA,B両方のServerに対してAPI操作が可能です。

 パケットモニタで中身を見たのですが、一見、同じバイナリーコードを送信していたので、3日ほど悩みました。

 やっとこ、判明したのは、リクエストを作成する際に、エンコードを指定するとBOMが付加され、BサーバーのXMLパースでエラーが出ていました。

 もうひとつ、MT3.33-jaしか試していないのですが、上記のようなエラーですと、faultCodeに「Client」と文字列が入りますので、XmlRpcIntにキャストするとエラーになります。

 又、MTだけだと思いますが、faultStringもBase64で返ってきますので、XmlRpcValueのタイプを判断してキャストしないとエラーになりました。

 少しでもご協力出来ればと思い報告させて頂きました。
 
 

shiroica 09-05-23 00:12:17 UTC

お久しぶりです。ご指摘大変助かります。
指摘を受けて差し替えを行いました。
・BOMの問題について
そもそもEncodingをUTF-8に決めうちしている今のやり方は良くないだろうということで、コンストラクタからEncodingを渡せるように変更しました。
BOM無しを指定する場合は、new UTF8Encoding(false)を渡してみてください。
・faultCode、faultString
それぞれint、stringであることがXML-RPCの仕様で決まっていますので、その仕様から逸脱していることを明示的に示す例外を吐くように変更しました。
どうしてもXmlRpcValue型で取得したい場合は、ソースコードに直接手を入れて下さい。

しかしBOMの問題ですか・・・。よく特定できましたね。お疲れ様です。

中山卓司 09-05-23 01:55:40 UTC

 早速の差し替えありがとうございます。

 faultCode, faultStringはMTの挙動がおかしいとは言え、発生して初めて分かる問題なので偶然とは言え報告出来て良かったです。

 BOMの問題は、Scribefoxと送信内容の何が違うのか、パケットモニタの結果をバイト毎に比較して見つけました。

 .NetでのXML-PRCはCook Computingが有名ですが、スッキリ度や敷居の低さなどはコチラの方が絶対上だと思っています。

 応援していますので、これからも頑張って下さい。

 では、

Trackbacks : 2

Trackback URL for this entry
http://blog.sharplab.net/blog/2009/04/12/wp-xml-rpclib2/trackback/

Listed below are links to weblogs that reference this entry

ピンバック from WP-XML-RPCLib & WP-XML-RPCCLib - SharpLab. 09-04-13 18:33:56 UTC

[…] This project is terminated.  WP-XML-RPCLib2 is the successor project. […]

ピンバック from IronPython触れてみた。 - SharpLab. 09-05-07 08:42:15 UTC

[…] WP-XML-RPCLib2を使って‘Hello World’メッセージをWordPressのBlogに投稿するコード。 […]