amazon product advertising apiで遊んでみた
TRANSCRIPT
Xtone Ltd. コード書く人 豊田陽一
AmazonのAPIで遊んでみたよ! ◦ 必要な事前準備 ◦ Ruby on Railsでの叩き方 ◦ 色々API叩いてみた ランキング取得 カート操作
アクセス証明書が必要 ◦ AWSにログインして取得可能 この辺の取得方法、割とちょくちょく変わってて、web上にある情報が結構古いことがある
AWSのコンソールから… ◦ セキュリティ証明書をポチッと
アクセス証明書から ◦ アクセスキーを取得する
Gem探してみた ◦ amazon-aaws ◦ amazon-ecs
今日はamazon-ecsを使ってみます ◦ Githubにあったから… ◦ ソースコード簡単だった ちなみに、どっちのプロジェクトも結構前から更新止まってるので、とりあえずamazon-ecsはforkしてみた。
アクセスキーの設定 ◦ config/initializers/amazon_ecs.rb あたりにでも記述する
Amazon::Ecs.configure do |options| options[:associate_tag] = <アソシエイトタグ> options[:AWS_access_key_id] = <アクセスキー> options[:AWS_secret_key] = <シークレットアクセスキー> end
Amazon APIの概念を理解しよう ◦ BrowseNodeAPIを利用する ◦ ResponseGroupで絞り込む
BrowseNode ◦ 階層的に扱われるカテゴリ的なもの ex) PCソフト、Bru-layとか メーカー名、作者名なども ◦ 商品が複数のBrowseNodeに属することもある(というか、ほとんど) ◦ BrowseNodeAPIで、指定したBrowseNodeの商品を取得できる
ResponseGroup ◦ 返されるレスポンスの絞り込みグループ APIによって利用できるResponseGroupは異なる
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が一致しないとエラーを返す
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
取得可能なもの ◦ 商品 売り上げランキング (TopSellers) 新着 (NewReleases) ギフトランキング (MostGifted) 欲しい者リスト登録ランキング (MostWishedFor)
◦ ブラウズノード 親や子のブラウズノード (BrowseNodeId)
2種類のカート ◦ ローカルショッピングカート www.amazon.co.jpで買い物するときに利用
普段ブラウザ上で使うのはこっち ◦ リモートショッピングカート APIによって作成されるカート 注文時にローカルショッピングカートの中身とマージすることも出来る というか、むしろus以外はいったんローカルショッピングカートにマージしないと買い物できない
リモートショッピングカートを作る ◦ 必ずカートに1つ以上商品を入れる Item.n.ASIN: カートに入れたい商品 Item.n.Quantity: 商品の数
nは1から始まる整数 ◦ レスポンスに以下の値が含まれる CartId: カートを一意に識別するID HMAC: カートを識別する認証コード
カート系のAPI呼び出しに上記2つの値が必要
リモートショッピングカートに商品を追加 ◦ CartIDとHMACを引数に渡す以外はCartCreateと同じ ◦ 新しくカートは作られず、既存のカートに商品が追加される
リモートショッピングカートを空にする ◦ CartIdとHMACを渡す
現在のカートの中身を取得する ◦ CartId, HMACをパラメータとして渡す ◦ カートの中身から、おすすめ商品も取得可能 ResponseGroupに以下の項目が指定可能
CartSimilarities (似たような商品) CartTopSellers (カート内商品の同カテゴリの売り上げ上位) usのみ
CartNewReleases (カート内商品の新着) usのみ
カートAPIの返り値に含まれる要素 ◦ 決済画面へのリンクURL ◦ いわゆるレジへ進む
カートに関するAPIが無い… ◦ 汎用リクエストメソッドのsend_requestを使えば何とかなる
options = { :operation => ‘CartCreate’, :country => :ja, ‘Item.1.ASIN’ => ‘B006J0YRCC’, ‘Item.1.Quantity’ => 1 } resp = Amazon::Ecs.send_request(options)
やれることは意外と単純 ◦ 商品探す カテゴリから キーワードから この商品を買った人は… ◦ カートの操作
Rubyのライブラリについて ◦ どれも何か開発が止まってる ◦ 単純だし、作ってみてもいいかも 返り値がXMLなのが色々面倒かも
アプリ作って遊んでた ◦ ランダムプレゼント交換アプリ スマホぶつける (bumpの要領) Amazon API利用してランキングの商品の中からランダムに1件取得する
スマホぶつけた相手にプレゼント! クリスマスパーティーに最適
遅い ◦ という遊びをしていました 送り先の指定までAPIでやれればなぁ…
はちゅねミク「見せられないよ!」 ◦ http://panikuru.web.fc2.com/Hobby/rakugaki/hatyne_miku/hatyune_miku.html