XML-RPC版MT4iの実験について中間報告

僕はMovableTypeを使い始めてすぐにひらたさんMoblogに登録させていただきました。んで、「携帯で更新できるならやっぱり確認もしたい」ということで、やっと探し当てた太鉄さんの「MT4i」。

どちらも本当にスバラシイものだと思います。

実は太鉄さんの方でも同じことを考えておられたことが判明して(させて)しまったこの件ですが、ひらたさんにアイデアを貰ったとのことで、「ネタがかぶってガッカリ」というよりもむしろ、「実はひらたさんや太鉄さんと同じことを考えていたのか」と一人で勝手にアツくなってます。

太鉄さん、殆どバラしちゃってすみません(汗)

で、やってみたところすんなり動いた・・・かと思ったんですが、結構一筋縄ではいかないようです。とりあえず、現時点で分かった点や問題点を書き留めておきます。

  • blogger.getRecentTitles()で記事一覧を取得するためには、そのBlogに対する「投稿」権限が必要
  • metaWeblog.getPost()で記事を取得するためには、そのBlogに対する「エントリーの編集」権限が必要
  • 相手のPublishCharsetを取得する方法はないようだ。
  • getRecentPostTitles()で全件取得したい場合、件数を取得する方法がない?適当に大きな値で要求すると、環境によってはエラーになる。
  • XMLRPC::Liteを使ってPublishCharset=EUCな環境から記事を引っ張ってこようとすると、XML::Parserでエラーとなってしまう。(encodings=”UTF-8″なのにMTが返す日本語テキストはPublishCharsetで指定されている文字コードなため)

件数の問題については、前もってgetRecentPostTitles()で一件だけ取得しておいて、postidで件数を憶測すれば問題ないかもしれないけどまだ未確認。でもpostidは全Blogを通してユニークなIDだから完全には無理なんですけど。

最後のエンコーディングの問題について。このあたりのことはNDO::Weblogさんのこの記事にそのものズバリが書いてあったんですが、見落としてました。(涙)
要するに、サーバ側もしくはクライアント側で、xmlで指定されたエンコーディングにきちんと変換してやる必要があるってことですね。これをクライアント側だけでうまく回避する方法はないものかと考えていたんですが、SOAP::Liteで

$SOAP::Constants::DO_NOT_USE_XML_PARSER = 1;

とすればXML::Parser::Liteを利用するようにでき、エラーを吐かないことが分かったので、結局そちらを使うことにしました。

One comment

  • Pingback: talk to oneself 2

  • コメントを残す

    メールアドレスが公開されることはありません。