アプリケーションを開発する際、外部APIを利用すると効率的に進められることがあるかと思います。
商品のAPIで言えば、AmazonAPIや楽天APIが有名ですね。
僕はプログラミングスクールで楽天APIの利用方法を学びましたが、ポートフォリオにはAmazonAPIを利用します。
そのため、公式のGitHubなどを見ながらなんとか実装する必要がありました。
今回は、RailsのアプリケーションでAmazonAPIを利用するための設定方法をまとめます。
#0.参考
Amazon Product Advertising APIで返却されたItemのXML構造
#1.Railsアプリケーション作成
任意のアプリケーション名(本記事では、「amazonapi」と命名)でRailsアプリケーションを作成します。
次に、データベースを作成します。
そして、無事Railsが起動していることを確認しましょう。
rails new amazonapi #任意のアプリケーション名で作成
rails db:create #データベース作成
rails server #アプリケーション起動確認
#2.Gemfileのインストール
2つのGemfileをインストールします。
まず、amazon-ecs
はAmazonAPIを利用するためのGemfileになります。
次に、dotenv-rails
は環境変数を管理するためのGeimfileで.env
ファイルに変数を記載すると、プログラムが環境変数として認識してくれるようになります。
そしてbundle install
でインストール。
gem 'amazon-ecs'
gem 'dotenv-rails'
#3.環境変数の宣言
initializers
という初期化設定用のフォルダに新たにamazon_ecs.rb
というファイルを作成します。
意味合いとしてはざっくりと、amazonAPIの設定は、詳しくは環境変数のファイルに書いてあるよと、というような宣言をしています。
具体的にはAmazon::Ecs
のconfigure(設定)
をoptions
という配列に代入します。
options
の中身は、[:AWS_access_key_id]
はENV(.envファイル)
のAWS_ACCESS_KEY_ID
だよ、と宣言します。
以下、[:AWS_secret_key]
と[:associate_tag]
も同様です。
amazon-ecs公式GitHubをアレンジして、環境変数に.envファイルを用いる形ですね。
Amazon::Ecs.configure do |options|
options[:AWS_access_key_id] = ENV['AWS_ACCESS_KEY_ID']
options[:AWS_secret_key] = ENV['AWS_SECRET_KEY']
options[:associate_tag] = ENV['ASSOCIATE_TAG']
end
#4.環境変数の設定
先ほど宣言した環境変数を具体的に記載するため新たに.env
ファイルを作成します。
AWS_ACCESS_KEY_ID = アクセスキーID
AWS_SECRET_KEY = シークレットキー
ASSOCIATE_TAG = アソシエイトタグ(トラッキングID)
#5.gitignore追記
.envファイルは絶対にgitにあげてはならないので、gitにあげない設定をします。
.env
#6.コンソールで確認
ruby
というキーワードで、jp(日本)
のamazon内の検索をします。
これまでの設定がうまくいっていれば、XML形式のデータがドバッと出力されます。
amazon-ecs公式GitHubの変数をアレンジして、country
をukからjpに変えています。
res = Amazon::Ecs.item_search('ruby', :country => 'jp')
設定がうまくいっていないと、下記のようなエラーになりますので、アクセスキーIDやシークレットキーを再確認しましょう。
##エラー1
Amazon::RequestError (HTTP Response: 403 Forbidden - Request must contain AWSAccessKeyId.)
AWSAccessKeyId(アクセスキーID)が送信できていないエラーです。
##エラー2
Amazon::RequestError (HTTP Response: 403 Forbidden - The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.)
AWSAccessKeyId(アクセスキーID)とAWS Secret Access Key(シークレットキー)の組み合わせが正しくないというエラーです。
##エラー3
HTTP Response: 503 Service Unavailable - AWS Access Key ID: XXXXXXXXXXXXXXX. You are submitting requests too quickly. Please retry your requests at a slower rate.
検索条件(今回で言えば('ruby', :country => 'jp')
)に誤りがある場合に出力されるエラーメッセージです。検索条件を変えながらうまく出力されるよう工夫してみましょう。
#7.取得できる値
res.items.each do |item|
item.get('ItemAttributes/Title'), #商品タイトル
item.get('LargeImage/URL'), #商品画像URL
item.get('DetailPageURL'), #商品詳細URL
item.get('ASIN'), #商品にユニークなコード
item.get('ItemAttributes/Brand'), #ブランド(メーカー)
item.get('ItemAttributes/Manufacturer'), #ブランド(メーカー)
item.get('ItemAttributes/Publisher'), #ブランド(メーカー)
item.get('ItemAttributes/Studio'), #ブランド(メーカー)
item.get('OfferSummary/LowestNewPrice/FormattedPrice'), #参考(情報取得時点の実売)価格を¥表示)
item.get('ItemAttributes/ListPrice/FormattedPrice'), #値引き前(情報取得時点の)価格を¥表示)
end
#RailsでAmazonAPIを使う方法まとめ
amazonAPIを実装するにあたって、環境変数の理解が深まりました。
今後は、amazonAPIからはどのような値が得られるのか、そしてアプリケーションではどのように使うのかといったところを学んでいきたいと思います。