Help us understand the problem. What is going on with this article?

【初心者】RailsでAmazonAPIを使ってみよう!

アプリケーションを開発する際、外部APIを利用すると効率的に進められることがあるかと思います。

商品のAPIで言えば、AmazonAPIや楽天APIが有名ですね。

僕はプログラミングスクールで楽天APIの利用方法を学びましたが、ポートフォリオにはAmazonAPIを利用します。

そのため、公式のGitHubなどを見ながらなんとか実装する必要がありました。

今回は、RailsのアプリケーションでAmazonAPIを利用するための設定方法をまとめます。

0.参考

amazon-ecs公式GitHub

Amazon Product Advertising APIで返却されたItemのXML構造

amazonAPIを使って商品情報取得

【Rails】Amazon APIで書籍検索アプリ作成

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::Ecsconfigure(設定)optionsという配列に代入します。

optionsの中身は、[:AWS_access_key_id]ENV(.envファイル)AWS_ACCESS_KEY_IDだよ、と宣言します。

以下、[:AWS_secret_key][:associate_tag]も同様です。

amazon-ecs公式GitHubをアレンジして、環境変数に.envファイルを用いる形ですね。

config/initializers/amazon_ecs.rb
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ファイルを作成します。

.env
AWS_ACCESS_KEY_ID = アクセスキーID
AWS_SECRET_KEY = シークレットキー
ASSOCIATE_TAG = アソシエイトタグ(トラッキングID

5.gitignore追記

.envファイルは絶対にgitにあげてはならないので、gitにあげない設定をします。

.gitignore
.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.取得できる値

items_controller.rb
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からはどのような値が得られるのか、そしてアプリケーションではどのように使うのかといったところを学んでいきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした