はじめに
今作ろうとしているrailsアプリで、書籍情報を入手する必要があったので、まずはruby単体で取得するところから、ということで。
Amazon Product Advertising APIと、それを呼び出すrubyのgem、amazon-ecsを利用する。
前提
以下の3つが必要
- amazonアソシエイトのトラッキングID
- AWS(amazon web service)のアクセスキーとシークレットキー
実はこっちの作業が厄介だったりします。
ログを取っていないので記事の引用とさせてください。
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
公式ドキュメントをよく読むのが良いエンジニア!(たとえ英語でも)
真似したりしなかったりして以下の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で加工してるみたいですね。
とりあえず欲しい情報は取れたのでアプリ開発します!