はてなブックマークAPIを Ruby の XMLRPC::Client で利用する時にはまった箇所

はてブ API を、Ruby の XMLRPC::Client で利用した時に、はまった箇所が2箇所あったので備忘録。

スポンサーリンク

はてなブックマーク件数取得API – Hatena Developer Center を利用して はてなブックマーク総数カウンター | EasyRamble を作ったのですが、 サンプルプログラムの Perl コードを参考にして Ruby で書いた。jQuery を利用した Ajax リクエストで、Javascript のコードは WordPress の投稿記事内に直接書きました

最初に書いた Ruby コード(簡略版)

簡略化してますけど以上の様なコードを最初書いたところ、以降のエラーに遭遇しました。

Wrong content-type エラー

まず遭遇したのが、以下の content-type が間違ってますよ、のエラー。

xmlrpc/client.rb:498 を確認すると…

Ruby のライブラリ XMLRPC::Client(xmlrpc/client)は、content-type として text/xml のみを受け取る前提になっているようです。はてブAPIを叩いて実際に受け取っているのは、application/xml。

parse_content_type メソッドは以下。xmlrpc/utils.rb の163行目〜。

モンキーパッチで、以下のように content-type を無理やり書き換えて text/xml を返すようにしてやる。

このコードを追加して、Wrong content-type エラーは回避出来ました。

Wrong size エラー

次に遭遇したのが、Wrong size エラー。

xmlrpc/client.rb:506 は以下。

今度は、Content-Length のサイズが期待されたもの値と違いますよ、という内容のエラーです。これは、XMLRPC が依存する Net::HTTP がデフォルトで HTTP 圧縮を行っているためらしい。ということで、HTTP 圧縮を行わないように header 情報を追加します。

以上で Wrong size エラーも回避できました。

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!