: O. Yuanying

RubyでAmazon WebServiceした時のメモ

irb(main):001:0> require 'amazon/search'
=> true

irb(main):002:0> include Amazon::Search
=> Object

# Developper Tokenを設定する。
irb(main):004:0> DEV_TOKEN = "**********"
=> "**********"

#リクエストオブジェクトを生成する。
#第二引数はアソシエイトID、デフォルトでRuby-Amazonライブラリ作成者のID?
irb(main):030:0> req = Request.new DEV_TOKEN, nil, 'jp'
=> #<Amazon::Search::Request:0x68f87c @id="calibanorg-20", @conn=#<Net::HTTP xml.amazon.co.jp:80 open=true>, @cache=#<Amazon::Search::Cache:0x68f7a0 @path="/tmp/amazon">, @config={}, @token="**********", @locale="jp", @user_agent="Ruby/Amazon 0.9.2">

#ASINをキーに検索を試みる。
#第二引数にHEAVYをとると、レビューとかもゲットできる。
irb(main):031:0> res = req.asin_search '4797314087', LITE
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Pr
...

#ヒット数を表示。
#ASINをキーに検索してるので、1。
irb(main):035:0> puts res.products.size
1
=> nil

#ヒットした製品を変数にセット。
irb(main):032:0> prd = res.products[0]
=> #<Amazon::Product:0x67a670 @ma
...

#製品情報を表示。
irb(main):034:0> puts prd
asin             = "4797314087"
authors          = ["\351\253\230\346\251\213 \345\276\201\347\276\251", "\345\276\214\350\227\244 \350\243\225\350\224\265", "\343\201\276\343\201\244\343\202\202\343\201\250 \343\202\206\343\201\215\343\201\262\343\202\215"]
availability     = "This item is currently not available."
catalog          = "Book"
image_url_large  = "//images-jp.amazon.com/images/P/4797314087.09.LZZZZZZZ.jpg"
image_url_medium = "//images-jp.amazon.com/images/P/4797314087.09.MZZZZZZZ.jpg"
image_url_small  = "//images-jp.amazon.com/images/P/4797314087.09.THUMBZZZ.jpg"
list_price       = "\357\277\245 2,730"
manufacturer     = "\343\202\275\343\203\225\343\203\210\343\203\220\343\203\263\343\202\257\343\202\257\343\203\252\343\202\250\343\202\244\343\203\206\343\202\243\343\203\226"
product_name     = "\343\201\237\343\201\256\343\201\227\343\201\204Ruby\342\200\225Ruby\343\201\247\343\201\257\343\201\230\343\202\201\343\202\213\346\260\227\350\273\275\343\201\252\343\203\227\343\203\255\343\202\260\343\203\251\343\203\237\343\203\263\343\202\260"
release_date     = "2002/03"
url              = "//www.amazon.co.jp/gp/product/4797314087%3ftag=calibanorg-20%26link_code=xm2%26camp=2025%26dev-t=1RZFVAVBYRJH2TRKC6G2"
used_price       = "\357\277\2453,798"
=> nil

注意点としては、

  • Requestオブジェクトは使い回しが効かない。
  • 取得したデータは90日で破棄しないと駄目。
  • リクエストは1回/1秒を守らないと駄目。

複数のASINキーを一度のリクエストで検索してみる。

カンマ区切りだとどうだろう?

irb(main):037:0> res = req.asin_search '4797314087,4797335750', LITE
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
...

irb(main):039:0> puts res.products.size
2
=> nil

おー、もしかして配列でもいけたりして…。

irb(main):040:0> isbns = Array.new
=> []
irb(main):041:0> isbns << '4797335750'
=> ["4797335750"]
irb(main):042:0> isbns << '4797314087'
=> ["4797335750", "4797314087"]
irb(main):044:0> req = Request.new DEV_TOKEN, nil, 'jp'
=> #<Amazon::Search::Request:0x63dcc
...

irb(main):045:0> res = req.asin_search isbns, LITE
=> "<?xml version=\"1.0\" encoding=\"UTF-8\
...

irb(main):048:0> puts res.products.size
2
=> nil

なるほろねー。なんかJavaをやってるとこういうRubyのプログラマに対する優しさが身に染みるぜ。