AmazonのWebサービスを呼んでみる

Amazon Web サービスを呼んで、簡単な商品検索をするRubyコードを書いてみた。
AmazonWebサービスは、RESTとSOAPの2つのインターフェイスを提供しているのだけど、今回はお手軽にRESTの方を使った。
本のタイトルの一部を入力すると、一致する本のタイトルの一覧を表示するコードは、以下のようになる。

require 'net/http'
require 'rexml/document'
require 'kconv'

class Amazon
  def initialize(accessKeyId)
    @accessKeyId = accessKeyId
  end

  def title_search(title)
    Net::HTTP.start('ecs.amazonaws.jp') do |http|
      response = http.get('/onca/xml?' +
                          build_query('Operation' => 'ItemSearch',
                                      'SearchIndex' => 'Books', # ここを変えれば、本以外も検索できる
                                      'Title' => title,
                                      'ResponseGroup' => 'Medium'))
      itemSearchResponse = REXML::Document.new(response.body)
#      itemSearchResponse.write(open('out.xml', 'w'), indent = 2)
      return itemSearchResponse.elements['ItemSearchResponse/Items']
    end
  end

  private
  
  def build_query(query_hash)
    query_hash['AWSAccessKeyId'] = @accessKeyId
    query_hash['Service'] = 'AWSECommerceService'
    query_hash.map do |key,value|
      "#{URI.encode(key)}=#{URI.encode(value)}"
    end.join("&")
  end
end

amazon = Amazon.new('XXXXX') # Access Key ID を設定する
items = amazon.title_search(gets)
totalResults = items.get_text('TotalResults')
totalPages =  items.get_text('TotalPages')
puts "Total Results: #{totalResults}, Total Pages: #{totalPages}"
items.each_element('Item') do |e|
  puts e.elements['ItemAttributes/Title'].get_text.to_s.tosjis
end

出力はこんな感じ。

e:\ruby\aws>ruby test.rb
Ruby on Rails <--- ここはキーボードからの入力
Total Results: 7, Total Pages: 1
Ruby on Rails入門―優しいRailsの育て方
はじめよう Ruby on Rails
最新LLフレームワークエクスプローラ Ruby on Rails, Maple/Ethna(PHP),Catalyst(Perl),TurboGears(Python) 5大フレームワーク徹底攻略
かんたんRuby on RailsでWebアプリケーション開発
ライド・オン・Rails Ruby on Railsを徹底攻略
はじめてのRuby on Rails―話題の「Webアプリケーション・フレームワーク」が使える!
実践 Ruby on Rails Webプログラミング入門―無駄なく迅速な開発環境

e:\ruby\aws>