AmazonのWebサービスを呼んでみる
Amazon Web サービスを呼んで、簡単な商品検索をするRubyコードを書いてみた。
AmazonのWebサービスは、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>