ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

rubyでamazon-ecsを使って書籍情報を取得する

はじめに

今作ろうとしているrailsアプリで、書籍情報を入手する必要があったので、まずはruby単体で取得するところから、ということで。

Amazon Product Advertising APIと、それを呼び出すrubyのgem、amazon-ecsを利用する。

前提

以下の3つが必要

実はこっちの作業が厄介だったりします。

ログを取っていないので記事の引用とさせてください。

www.ajaxtower.jp

Amazon Product Advertising APIで使うシークレットアクセスキーを取得する
blog.makotokw.com

amazonアソシエイトのほうはカンタンで、登録後、ログインすると左側にトラッキングIDが表示されています。

AWSのほうが分かりづらかったです。

amazon-ecs

いれましょう。

MacBook-Air:ruby take$ sudo gem install amazon-ecs
Password:
Fetching: ruby-hmac-0.4.0.gem (100%)
Successfully installed ruby-hmac-0.4.0
Fetching: amazon-ecs-2.4.0.gem (100%)
Successfully installed amazon-ecs-2.4.0
Fetching: mini_portile2-2.0.0.gem (100%)
Successfully installed mini_portile2-2.0.0
Parsing documentation for ruby-hmac-0.4.0
Installing ri documentation for ruby-hmac-0.4.0
Parsing documentation for amazon-ecs-2.4.0
Installing ri documentation for amazon-ecs-2.4.0
Parsing documentation for mini_portile2-2.0.0
Installing ri documentation for mini_portile2-2.0.0
Done installing documentation for ruby-hmac, amazon-ecs, mini_portile2 after 0 seconds
3 gems installed

公式ドキュメントをよく読むのが良いエンジニア!(たとえ英語でも)

github.com

真似したりしなかったりして以下のrubyファイルを作成。
ラッキングID、アクセスキー、シークレットキーは置き換えてね。

#! /usr/bin/ruby
# coding: UTF-8

require 'rubygems'
require 'amazon/ecs'

Amazon::Ecs.debug = true

Amazon::Ecs.options = {
  :associate_tag => "トラッキングID",
    :AWS_access_key_id => "アクセスキー",
    :AWS_secret_key => "シークレットキー"
}

res = Amazon::Ecs.item_search('ruby', {:search_index => 'Books', :response_group => 'Medium,ItemAttributes,Images', :country => 'jp'})
res.items.each do |item|

  puts item.get_element('ItemAttributes')

  #階層が下のものも取得できる
  puts "Title:#{item.get('ItemAttributes/Title')}"
  puts "Author:#{item.get('ItemAttributes/Author')}"

  # 画像のurlとサイズをhashで取得
  puts item.get_hash('SmallImage')
end

実行結果

MacBook-Air:ruby take$ ruby amazon-api.rb 
Adding AWSAccessKeyId=省略
Adding AssociateTag=省略
Adding Keywords=ruby
Adding Operation=ItemSearch
Adding ResponseGroup=Medium,ItemAttributes,Images
Adding SearchIndex=Books
Adding Timestamp=2016-01-06T13:02:40Z
Request URL: http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=省略&AssociateTag=省略&Keywords=ruby&Operation=ItemSearch&ResponseGroup=Medium%2CItemAttributes%2CImages&SearchIndex=Books&Timestamp=2016-01-06T13%3A02%3A40Z&Signature=省略
<ItemAttributes>
  <Author>高橋 征義</Author>
  <Author>後藤 裕蔵</Author>
  <Binding>単行本</Binding>
  <EAN>9784797386295</EAN>
  <EANList>
    <EANListElement>9784797386295</EANListElement>
  </EANList>
  <Edition>5</Edition>
  <IsAdultProduct>0</IsAdultProduct>
  <ISBN>4797386290</ISBN>
  <Label>SBクリエイティブ</Label>
  <Languages>
    <Language>
      <Name>日本語</Name>
      <Type>Published</Type>
    </Language>
  </Languages>
  <ListPrice>
    <Amount>3024</Amount>
    <CurrencyCode>JPY</CurrencyCode>
    <FormattedPrice>3,024</FormattedPrice>
  </ListPrice>
  <Manufacturer>SBクリエイティブ</Manufacturer>
  <NumberOfPages>520</NumberOfPages>
  <ProductGroup>Book</ProductGroup>
  <ProductTypeName>ABIS_BOOK</ProductTypeName>
  <PublicationDate>2016-02-26</PublicationDate>
  <Publisher>SBクリエイティブ</Publisher>
  <Studio>SBクリエイティブ</Studio>
  <Title>たのしいRuby 第5</Title>
</ItemAttributes>
Title:たのしいRuby 第5版
Author:高橋 征義
{"URL"=>"http://ecx.images-amazon.com/images/I/41GhmdNEZdL._SL75_.jpg", "Height"=>"75", "Width"=>"53"}
(省略、10件取得できる)

xmlで取得したものを内部的にnokogiriで加工してるみたいですね。
とりあえず欲しい情報は取れたのでアプリ開発します!