rubyでamazonからISBNを検索

日本語ドキュメントがなくてちと悩んだんだけど、結果的にすごい簡単なことだったのでメモしておく。

rubyスクリプトamazonのWabAPIを利用して、ISBNから書誌情報を取得するサンプル。

インストールと設定

まずはライブラリをインストール。
> gem install ruby-aaws
で、実行ディレクトリに、「.amazonrc」という名称で以下の内容のファイルを作成。
実行ディレクトリにキャッシュファイルを作成する設定になっている。
[global]
  key_id        = 'YOURACCESSKEYSTRING'
  secret_key_id = 'YOURSECREDKEYIDSTRINGXXXXXXXXXX'
 associate     = 'YOURASSOCIATEIDSTRING'
  locale        = jp
  cache         = true
  cache_dir     = .

サンプルコード作成

適当な名前で以下のコードを作成し、引数に13桁のISBNを指定してキックしてやる。
# 事前に > gem install ruby-aaws を実行します。

require 'amazon/aws'
require 'amazon/aws/search'

isbn = ARGV.shift # 第一引数からISBNを取得

# 設定ファイルのデフォルトは /etc/amazonrc か ~/.amazonrc
# それ以外の場所に設定をおきたい場合は、以下の環境変数を変更する。
ENV['AMAZONRCDIR']  = '.' # 設定ファイルの位置を変えるときはこれ
# ENV['AMAZONRCFILE'] = 'amazonrc' # 設定ファイルの名称を変えるときはこれ

begin

  # il = Amazon::AWS::ItemLookup.new('ASIN', {'ItemId' => '4063142450'} ) # ASIN指定の場合
  # il = Amazon::AWS::ItemLookup.new('ISBN',{'ItemId' => isbn}),  # ISBNだけどerror パラメータが足りない
  # il = Amazon::AWS::ItemLookup.new('ISBN',{'ItemId' => '9784797340045','SearchIndex' => 'Books'}) # 間違ったISBNで検索
  il = Amazon::AWS::ItemLookup.new('ISBN',{'ItemId' => isbn,'SearchIndex' => 'Books'})
  rg = Amazon::AWS::ResponseGroup.new( 'Medium' )

  req = Amazon::AWS::Search::Request.new()

  page = req.search(il, rg)

  puts '===================page Analysis'
  puts page.class
  puts '==↑page.class'
  puts page.methods(false)
  puts '==↑page.methods(fase)'
  puts page.inspect
  puts '==↑page.inspect'
  puts page.properties
  puts '==↑page.properties'
  # puts '===================ItemLookup response'
  # puts page
  puts '===================Get ASIN and other data'
  print "ASIN = ",           page.item_lookup_response.items.item.asin ,"\n"
  print "small_image = ",    page.item_lookup_response.items.item.small_image.url,"\n"
  print "medium_image = ",   page.item_lookup_response.items.item.medium_image.url,"\n"
  print "large_image = ",    page.item_lookup_response.items.item.large_image.url,"\n"
  print "detail_page_url = ",page.item_lookup_response.items.item.detail_page_url,"\n"
  print "title = ",          page.item_lookup_response.items.item.item_attributes.title,"\n"
  print "publisher = ",      page.item_lookup_response.items.item.item_attributes.publisher,"\n"
  print "author = ",         page.item_lookup_response.items.item.item_attributes.author,"\n"

rescue SocketError => exp
  # ソケットエラーが出た場合は10秒待ってから、beginより再実行
  print exp.backtrace ,"\n  [", exp.message , "]\n"
  sleep 10
  retry
rescue => exp
 print exp.backtrace ,"\n class=", exp.class , "\n  [", exp.message , "]\n"
end

これで、こんな感じの出力が得られる。
 ===================page Analysis

Amazon::AWS::AWSObject

 ==↑page.class

 ==↑page.methods(fase)

#"http://webservices.amazon.com/AWSECommerceService/2009-03-31"}, @operation_request=[#], @request_processing_time=[#], @arguments=[#"Operation", "value"=>"ItemLookup"}>, #"Service", "value"=>"AWSECommerceService"}>, #"AssociateTag", "value"=>"calibanorg-20"}>, #"Version", "value"=>"2009-03-31"}>, #"SearchIndex", "value"=>"Books"}>, #"ItemId", "value"=>"9784797340044"}>, #"IdType", "value"=>"ISBN"}>, #"AWSAccessKeyId", "value"=>"AKIAIIMLO73WZPHFMIQA"}>, #"ResponseGroup", "value"=>"Medium"}>]>], @http_headers=[#"UserAgent", "value"=>"Ruby/Amazon/AWS 0.6.0"}>]>]>], @items=[#], @total_new=[#], @lowest_new_price=[#], @formatted_price=[#], @amount=[#]>], @total_refurbished=[#], @total_used=[#], @lowest_used_price=[#], @formatted_price=[#], @amount=[#]>]>], @image_sets=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @attrib={"category"=>"primary"}, @thumbnail_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @small_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @large_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @tiny_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @swatch_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>]>, #"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @attrib={"category"=>"variant"}, @thumbnail_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @small_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @large_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @tiny_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @swatch_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>]>]>], @sales_rank=[#], @medium_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @detail_page_url=[#], @item_attributes=[#], @studio=[#], @publication_date=[#], @list_price=[#], @formatted_price=[#], @amount=[#]>], @product_group=[#], @isbn=[#], @ean=[#], @number_ofpages=[#], @binding=[#], @title=[#], @publisher=[#], @product_type_name=[#], @label=[#], @author=[#, #, #], @edition=[#], @package_dimensions=[#"hundredths-inches"}>], @width=[#"hundredths-inches"}>], @weight=[#"hundredths-pounds"}>], @height=[#"hundredths-inches"}>]>], @creator=[#"\347\233\243\344\277\256"}>]>], @small_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @large_image=[#"pixels"}>], @height=[#"pixels"}>], @url=[#]>], @item_links=[#], @url=[#]>, #], @url=[#]>, #], @url=[#]>, #], @url=[#]>]>], @asin=[#]>], @request=[#], @item_lookup_request=[#], @condition=[#], @item_id=[#], @search_index=[#], @merchant_id=[#], @review_page=[#], @delivery_method=[#], @variation_page=[#], @offer_page=[#], @review_sort=[#], @id_type=[#]>]>]>]>], @__op__=#"ItemLookup", "ItemId"=>"9784797340044", "IdType"=>"ISBN", "SearchIndex"=>"Books"}, @kind="ItemLookup">>

 ==↑page.inspect

item_lookup_response

__op__

 ==↑page.properties

 ===================Get ASIN and other data

ASIN = 4797340045

small_image = http://ecx.images-amazon.com/images/I/41w6qA2x-zL._SL75_.jpg

medium_image = http://ecx.images-amazon.com/images/I/41w6qA2x-zL._SL160_.jpg

large_image = http://ecx.images-amazon.com/images/I/41w6qA2x-zL.jpg

detail_page_url = http://www.amazon.co.jp/Ruby%E3%83%AC%E3%82%B7%E3%83%94%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-268%E3%81%AE%E6%8A%80-%E9%9D%92%E6%9C%A8-%E5%B3%B0%E9%83%8E/dp/4797340045%3FSubscriptionId%3DAKIAIIMLO73WZPHFMIQA%26tag%3Dcalibanorg-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797340045

title = Rubyレシピブック 第2版 268の技

publisher = ソフトバンク クリエイティブ

author = 青木 峰郎後藤 裕蔵高橋 征義