【Rails基礎】Amazon APIでAmazon商品検索ツールを作ってみた


RailsでAmazon APIを使ってみたい

最近、Railsの勉強をサボっていましたが、アフィリエイトリンク作成ツールを自作したいという思いから勉強を再開しました。

今回はアフィリエイトリンクツールで Amazon の商品を紹介できるようにしたかったので、

Amazon の API を用いて

Railsで Amazon の商品を検索する簡単なツール

を作ってみました。

その名も、

Amasearch

ですね。

 

Image from Gyazo

 

Railsの Amazon API の使い方を検索してみたところ、こちらの神記事を発見。

この記事を応用して書籍だけではなく、

Amazon.co.jp のすべてのカテゴリの商品を検索できるツールを作ってみました。

 

 

Railsで Amazon の API を使う前の準備

まずは Amazon の API を使う準備からですね。

実はAmazon APIを使うためには、

  • アソシエイト ID
  • アクセスキー ID
  • アソシエイトタグ

という3つの情報が必要になってきます。

これらは簡単に言ってしまうと、

Amazon アソシエイトで 商品を紹介する時に必要になってくる情報

です。

これらのキーの取得方法は割愛しますが、ちょっとググるとザクザク出てくると思います。

Amazon アソシエイトでアフィリエイトをしている方ならば絶対に知っている情報なので探してみてくださいね。

 

 

RailsでAmazon商品検索ツールを作る方法

準備が終わりましたら、早速 Amazon の商品を検索できるアプリを作っていきましょう。

ちなみに僕の開発環境は

  • Railsのバージョン:5.0.7.2
  • Rubyのバージョン:2.3.1

でした。

 

アプリを作成

まずは

というコマンドで「amasearch」というRailsアプリを作ってみましょう。

作成したら、アプリのディレクトリに移動してください。

 

splite3のバージョンを指定する

これは僕の場合だけかもしれませんが、Rails5にアップデートしたところ、必要になってしまった手順です。

Gemファイルの中の

という記述を

に変更。

splite3のバージョンを1.3.6に指定してあげましょう。

ぼくの場合、これをやらねばデータベース、コントローラー作成のフェーズでエラーが出てしまうのです・・・!

Gemファイルに記述したら上書き保存して

を発動しましょう。

 

データベース作成

今回のアプリは商品を検索するだけなので、データベースは使いません。

がしかし、Rails自体がデータベース仕様を前提に作られているので、空のデータベースを用意しておく必要がありますね。

のあとに

を発動してやりましょう。

この手法はデータベース抜きのアプリをRailsで作りたいときに重宝しそうなやり口ですね。

 

コントローラーを作成する

続いてコントローラーですね。

今回は「goods_controller.rb」というコントローラーを作っていきます。

また作成時に「search」というアクションをデフォルトで作成する記述をしておくと後々捗りますね。

 

ルーティング設定する

次はルーティング。

「routes.rb」というファイルを開いて、このように記述します。

これでドメイントップに商品検索画面がくるようになります。

goodsコントローラーのsearchアクションをルートディレクトリに設定できましたね。

 

モデル作成

続いてモデルですね。

こちらは商品のGoodクラスを定義づけるファイルになります。

まずは

というコマンドでモデルファイルを作成。

 

そして、次のようにモデルファイルgood.rbに記述し、Goodクラスでどのようなインスタンスを作るのかを書いてあげます。

これによると、

  1. 商品のタイトル
  2. 画像の URL
  3. 商品の詳細 URL

の3つのプロパティを持ったクラスということがわかりますね。

 

ビューファイルを作成する

続いて、みた目を司る ビューファイルを作成していきます。

search.html.erbというファイルを新規で

app>views>goods

配下に新規で自分で作成してください。

検索窓に入れたキーワードが「keyword」というname属性になっているので、コントローラー側で「params[:keyword]」で取り出せることになります。

あと商品を表示させる部分に関しては部分テンプレートで表現していますので、「_good_list.html.erb」というファイルも作っておきましょう。

こちらはAmazon商品のオブジェクトを代入した@goodsというクラス変数の配列を、eachメソッドでgoodという変数で個々に取り出し、link_toメソッドで

  • 第一引数:リンク先をgoodのimage_urlプロパティの画像
  • 第二引数:商品の詳細URL

と指定することで、商品の画像自体に詳細のURLを貼ります。

で、そのあとに「good.title」でgood変数のtitleプロパティ(商品のタイトル)を表示するようになってるのですね。

 

Gemを追加

いよいよ Amazon API のgemを導入して行きます。

Gemファイルに

を追記して上書き保存しましょう。

 

アソシエイトキーなどを指定する

Gemfileを上書き保存したらまだバンドルインストールは待ってください。

それよりも先にAmazon アソシエイトキーの情報を「environment.rb」 というファイルに記述しなければならないのです。

階層はconfig/locales/environment.rbになりますね。このファイルを次のように編集します↓

このファイルの中の

associate_tag アソシエイトタグ
AWS_access_key_id アクセスキー
AWS_secret_key シークレットキー

に冒頭で準備しておいて3つの

  • アソシエイト ID
  • アクセスキー ID
  • アソシエイトタグ

を記入してやりましょう。記入して上書き保存したら

します。

 

コントローラーを記述する

最後に以前作成したコントローラーの「goods_controller.rb」を編集していきます。

3行目の

でフォームにキーワードが入力されたか条件分岐を判断し、入力されているならそのkeywordの文字を検索ワードとし、Amazonから検索してgoodsオブジェクトに代入してくれます。

goodsというオブジェクトをゲットできますので、そのプロパティにそれぞれeachメソッドを利用して

  • タイトル
  • 画像 URL
  • 商品の詳細 URL

を指定してあげましょう。

 

ここまでできれば完成です。

検索窓に試しに商品名を入れてみてください。
Image from Gyazo
1つの検索に対して最大10商品ですが、 Amazon での検索結果が出ると思います。

まだ、Amazon APIは初めて触っただけなのでまだまだ奥が深そうなので継続的に修行していきたいですね。

 

それでは!

Lin

 

【参考文献】


コメントはこちらからお願いします!



もう1本読んでみる