23
Xtone Ltd. コード書く人 豊田陽一

Amazon product advertising apiで遊んでみた

Embed Size (px)

Citation preview

Page 1: Amazon product advertising apiで遊んでみた

Xtone Ltd. コード書く人 豊田陽一

Page 2: Amazon product advertising apiで遊んでみた

 AmazonのAPIで遊んでみたよ! ◦ 必要な事前準備 ◦ Ruby on Railsでの叩き方 ◦ 色々API叩いてみた  ランキング取得  カート操作

Page 3: Amazon product advertising apiで遊んでみた

 アクセス証明書が必要 ◦ AWSにログインして取得可能  この辺の取得方法、割とちょくちょく変わってて、web上にある情報が結構古いことがある

Page 4: Amazon product advertising apiで遊んでみた

 AWSのコンソールから… ◦ セキュリティ証明書をポチッと

Page 5: Amazon product advertising apiで遊んでみた

 アクセス証明書から ◦ アクセスキーを取得する

Page 6: Amazon product advertising apiで遊んでみた

 Gem探してみた ◦  amazon-aaws ◦  amazon-ecs

 今日はamazon-ecsを使ってみます ◦ Githubにあったから… ◦ ソースコード簡単だった  ちなみに、どっちのプロジェクトも結構前から更新止まってるので、とりあえずamazon-ecsはforkしてみた。

Page 7: Amazon product advertising apiで遊んでみた

 アクセスキーの設定 ◦  config/initializers/amazon_ecs.rb あたりにでも記述する

Amazon::Ecs.configure do |options| options[:associate_tag] = <アソシエイトタグ> options[:AWS_access_key_id] = <アクセスキー> options[:AWS_secret_key] = <シークレットアクセスキー> end

Page 8: Amazon product advertising apiで遊んでみた

 Amazon APIの概念を理解しよう ◦ BrowseNodeAPIを利用する ◦ ResponseGroupで絞り込む

Page 9: Amazon product advertising apiで遊んでみた

 BrowseNode ◦ 階層的に扱われるカテゴリ的なもの   ex) PCソフト、Bru-layとか  メーカー名、作者名なども ◦ 商品が複数のBrowseNodeに属することもある(というか、ほとんど) ◦ BrowseNodeAPIで、指定したBrowseNodeの商品を取得できる

Page 10: Amazon product advertising apiで遊んでみた

 ResponseGroup ◦ 返されるレスポンスの絞り込みグループ   APIによって利用できるResponseGroupは異なる

Page 11: Amazon product advertising apiで遊んでみた

 Amazon::Ecs.browse_node_lookup ◦ node_idとオプションパラメータを指定 ◦ node_id一覧   https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?ShoppingCartConcepts.html

◦ パラメータには以下のものを指定   ResponseGroup: レスポンスグループ   country: 国   node_idで指定したノードの属する国とcountryが一致しないとエラーを返す

Page 12: Amazon product advertising apiで遊んでみた

def get options = {} options[:ResponseGroup] = :TopSellers options[:country] = :jp if params.key?(:page) then options[:item_page] = params[:page] end top_seller_resp = Amazon::Ecs.browse_node_lookup( params[:node_id], options) @top_seller = (top_seller_resp.doc/"TopItem").collect { |item| Amazon::Element.new(item).get_hash } end end

Page 13: Amazon product advertising apiで遊んでみた

 取得可能なもの ◦ 商品  売り上げランキング (TopSellers)  新着 (NewReleases)  ギフトランキング (MostGifted)  欲しい者リスト登録ランキング (MostWishedFor)

◦ ブラウズノード  親や子のブラウズノード (BrowseNodeId)

Page 14: Amazon product advertising apiで遊んでみた

 2種類のカート ◦ ローカルショッピングカート   www.amazon.co.jpで買い物するときに利用

 普段ブラウザ上で使うのはこっち ◦ リモートショッピングカート   APIによって作成されるカート  注文時にローカルショッピングカートの中身とマージすることも出来る  というか、むしろus以外はいったんローカルショッピングカートにマージしないと買い物できない

Page 15: Amazon product advertising apiで遊んでみた

 リモートショッピングカートを作る ◦ 必ずカートに1つ以上商品を入れる   Item.n.ASIN: カートに入れたい商品   Item.n.Quantity: 商品の数

 nは1から始まる整数 ◦ レスポンスに以下の値が含まれる   CartId: カートを一意に識別するID   HMAC: カートを識別する認証コード

 カート系のAPI呼び出しに上記2つの値が必要

Page 16: Amazon product advertising apiで遊んでみた

 リモートショッピングカートに商品を追加 ◦ CartIDとHMACを引数に渡す以外はCartCreateと同じ ◦ 新しくカートは作られず、既存のカートに商品が追加される

Page 17: Amazon product advertising apiで遊んでみた

 リモートショッピングカートを空にする ◦ CartIdとHMACを渡す

Page 18: Amazon product advertising apiで遊んでみた

 現在のカートの中身を取得する ◦ CartId, HMACをパラメータとして渡す ◦ カートの中身から、おすすめ商品も取得可能   ResponseGroupに以下の項目が指定可能

 CartSimilarities (似たような商品)  CartTopSellers (カート内商品の同カテゴリの売り上げ上位)   usのみ

 CartNewReleases (カート内商品の新着)   usのみ

Page 19: Amazon product advertising apiで遊んでみた

 カートAPIの返り値に含まれる要素 ◦ 決済画面へのリンクURL ◦ いわゆるレジへ進む

Page 20: Amazon product advertising apiで遊んでみた

 カートに関するAPIが無い… ◦ 汎用リクエストメソッドのsend_requestを使えば何とかなる

options = { :operation => ‘CartCreate’, :country => :ja, ‘Item.1.ASIN’ => ‘B006J0YRCC’, ‘Item.1.Quantity’ => 1 } resp = Amazon::Ecs.send_request(options)

Page 21: Amazon product advertising apiで遊んでみた

 やれることは意外と単純 ◦ 商品探す  カテゴリから  キーワードから  この商品を買った人は… ◦ カートの操作

 Rubyのライブラリについて ◦ どれも何か開発が止まってる ◦ 単純だし、作ってみてもいいかも  返り値がXMLなのが色々面倒かも

Page 22: Amazon product advertising apiで遊んでみた

 アプリ作って遊んでた ◦ ランダムプレゼント交換アプリ  スマホぶつける (bumpの要領)   Amazon API利用してランキングの商品の中からランダムに1件取得する

 スマホぶつけた相手にプレゼント!  クリスマスパーティーに最適

 遅い ◦ という遊びをしていました  送り先の指定までAPIでやれればなぁ…

Page 23: Amazon product advertising apiで遊んでみた

 はちゅねミク「見せられないよ!」 ◦ http://panikuru.web.fc2.com/Hobby/rakugaki/hatyne_miku/hatyune_miku.html