Amazon E-Commerce Service 4.0 を Ruby から使うには

2007/02/22

Amazon E-Commerce Service 4.0 (ECS4.0) に興味があったので、Ruby から使う方法を調べたメモ。

ECS4.0 は REST と SOAP の 2 つのインタフェースを提供しているので、Ruby から使う場合も、REST か SOAP のどちらかを利用することになります。

REST を利用する場合

REST を利用する場合、流れは

  1. HTTP でリクエストを発行する
  2. 結果が XML で返ってくるのでパースして使う

となります。この処理をラッピングしたライブラリもいくつかありました。

recs4 は XML のパースに REXML を、amazon-ecs は Hpricot を利用しているようです。REXML は Ruby 標準添付ですが、Hpricot は別途 gem をインストールする必要があります。そのため REXML のほうが手軽ですが、速度は Hpricot に劣るようです。

また、私も勉強のために 単純な Rails Plugin を作ってみました。こちらは結果の XML をパースせずに String オブジェクトのまま返します。最初は PHP の Zend Framework の Amazon API を模して、XML を REXML で完全にパースしてオブジェクト化して戻すプラグインを作っていたのですが、

  • 細かくパースしすぎて遅くなった
  • 欲しい情報はアプリケーションによって異なるからパースしても無駄か?
  • 同様のもっといい Ruby ライブラリが世にあった

などの理由から、逆にまったくパースせずに String オブジェクトで返すようにしました。ただし、一部のメタ情報(検索結果数、発生したエラーなど)を参照しやすいように、String オブジェクトを拡張して返しています。こんな感じで使います。

req = SimpleAmazon::REST.new :jp
res = req.item_lookup :item_id => "4798013951"
# XML が入った String オブジェクトが返ります

res は拡張されているので、res.has_error? でエラーの発生を確認したり、res.total_results で検索結果数を確認したりできます。

よってREST を利用する場合は、上述したライブラリを使ったり、自分でラッパを作ったりすることが必要です。

SOAP を利用する場合

最新の Ruby には SOAP ライブラリである SOAP4R が含まれていますし、単体配布版の SOAP4R には wsdl2ruby.rb という WSDL ファイルから Web サービスへのアクセス用クラスを生成してくれるプログラムが付属しています。そのため、ECS4.0 の WSDL を wsdl2ruby.rb に食わせれば、簡単に ECS4.0 アクセス用クラスを生成できるはず、なのですが、wsdl2ruby.rb に ECS4.0 の WSDL を食わせると例外を吐いて落ちます。こちらなどによると、Amazon の旧 API の WSDL を食わせると上手くいくようなので、SOAP を使いたければ ECS4.0 はあきらめて旧 API を利用するしかないようです。

REST と SOAP 両方を調査してみました。現状、ECS4.0 を使うには、REST でやるほうが楽そうです。ECS4.0 にこだわらずに Amazon Web Service 3.1 (AWS3.1) などの旧 API を利用するのであれば、wsdl2ruby.rb を使うのが一番楽だと思うのですが、ECS4.0 は取得できる情報も AWS3.1 よりかなり増えているので、出来れば ECS4.0 を使いたいところです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。