2018年1月30日火曜日

Ruby で Amazon ECS (Advertising API) をサクっと使ってみる

概要

Amazon ECS (ECommerceService) はショッピングサイトの Amazon の情報を検索することができる API です
今回は Ruby から API をコールして商品情報を取得してみました

環境

  • macOS 10.13.2
  • Ruby 2.4.1p111
  • amazon-ecs 2.5.0

ライブラリインストール

  • bundle init
  • vim Gemfile
gem "amazon-ecs"
  • bundle install --path vendor

Nokogiri のインストールでこける場合は以下のコマンドを実行後、再度 bundle install してください

  • brew install libxml2
  • bundle config build.nokogiri --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2

必要な情報の取得

AWS のアクセスキー/シークレットアクセスキーおよび Amazon アソシエイト用のトラッキング ID を取得します

アクセスキーの取得

https://affiliate.amazon.co.jp/assoc_credentials/home にアクセスして「認証キーを管理する」を選択します
advertising_api1.png

すると AWS の認証画面になるので Amazon アソシエイトにログインした ID/PW でログインします
ログインが完了すると IAM と呼ばれる AWS のアカウントを管理する画面になるので、そこで「アクセスキー (アクセスキー ID とシークレットアクセスキー) 」を選択します
すでにキーがあればそれを使っても OK ですがない場合は作成してください
ここで表示されるアクセスキーとシークレットアクセスキーは忘れないようにしましょう
シークレットアクセスキーはこの画面からは確認できないので忘れると再発行する必要があります
advertising_api2.png

トラッキング ID の取得

トラッキング ID は商品したのがどのアカウントか紐付けるための情報です
Amazon アソシエイトにログインして上段のアカウントから「トラッキング ID の管理」を選択します
advertising_api3.png

するとトラッキング ID の一覧が表示されます
まだない場合は新規で作成すれば OK です
advertising_api4.png

サンプルコード

  • vim test_ecs.rb
require 'amazon/ecs'

Amazon::Ecs.configure do |options|
  options[:AWS_access_key_id] = 'your access key'
  options[:AWS_secret_key] = 'your secret key'
  options[:associate_tag] = 'traking ID'
end

res = Amazon::Ecs.item_search(
  'figma',
  :response_group => 'Large',
  :search_index => 'All',
  :country => 'jp'
)

res.items.each do |item|
  puts item
end
  • bundle exec ruby test_ecs.rb

すると XML がづらーっと表示されます
デフォルトだと 10 件分取得できるようです
例えばタイトルと価格を取得したい場合は以下のようにします

res.items.each do |item|
  puts item.get('ItemAttributes/Title')
  puts item.get('ItemAttributes/ListPrice/Amount')
end

またアフィリエイトリンクを生成する場合は以下のようにするとできるようです

res.items.each do |item|
  puts item.get('DetailPageURL')
end

検索に関するオプション :response_group に関して指定できる値はこちらを参照してください
また、:search_index に関してはこちらを参照してください

503 You are submitting requests too quickly. Please retry your requests at a slower rate. 対応

これは単純にリクエストしすぎだよーというエラーになります
公式を見ると 1req/1sec まで OK とあるようですが、その間隔でリクエストすると当然のようにエラーになります
詳細な理由はわかりませんがエラーが発生する場合は 1 分ほどおいてからリクエストすると良いと思います

最後に

Ruby で Amazon Advertising API を試してみました
試すのは非常に簡単かなと思います
ただ頻繁に 503 エラーが発生するのでむしろ 503 エラーと格闘する時間のほうが長いかなと思います

参考サイト

0 件のコメント:

コメントを投稿