ホーム DoRuby RailsでAmazon APIを利用する

RailsでAmazon APIを利用する

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。
KBMJのプログラマのx5rです。

今回はRailsからAmazonAPIを利用してみようと思います。

環境

Railsの環境が既に構築されているものとします。
ちなみに私の環境は

Mac : IntelMac
OS : Mac OS X 10.5.1 Leopard$ script/about
About your application’s environment
Ruby version              1.8.6 (i686-darwin8.10.3)
RubyGems version          1.0.1
Rails version             2.0.2
Active Record version     2.0.2
Action Pack version       2.0.2
Active Resource version   2.0.2
Action Mailer version     2.0.2
Active Support version    2.0.2
Application root          /Users/username/dev/doruby
Environment               development
Database adapter          mysql

となっています。

それではAmazonAPIを使ってみます。

Amazon Web Serviceアカウントの取得

Amazon Web Serviceを利用するためには、ショッピング用とは別のアカウントが必要になりますので、持っていない場合はAmazon Web Serviceから取得します。

Amazon::Ecsをインストール

Amazon Web Serviceを利用するためのgemsライブラリ

Amazon::Ecs

をインストールします。$sudo gem install amazon-ecs

Railsプロジェクトを作成

$rails amazon
$cd amazon

API keyの設定

config/environment.rbで上記でインストールしたAmazon::Ecsを読み込み、そして上記で取得したAmazon Web Serviceを利用するためのAPI keyを設定します。

・・・
#一番下に記述
require ‘amazon/ecs’
Amazon::Ecs.debug = true
Amazon::Ecs.options = {
  :aWS_access_key_id => “XXXXXXXXXXXXXXXXXXXX”,
  :associate_tag => “xxxxxx-22”,
  :country => :jp
}

Modelの作成


Amazon Web Serviceから取得したデータを設定するモデルを作成します。

ここでは特にDBにはアクセスしないので、ActiveRecordを継承しないモデルを作成します。$ less app/models/item.rb
class Item
  attr_accessor :asin, :title, :image, :url
  def initialize(asin, title = nil, url = nil, image = nil)
    @asin = asin
    @title = title
    @url = url
    @image = image
  end
end

Controllerの作成

Amazon Web Serviceにアクセスするコントローラーを作成します。

今回はAmazonの音楽カテゴリから検索するようにします。
$script/generate controller amazon
$ less app/controllers/amazon_controller.rb
class AmazonController < ApplicationController
  def index
    if request.get?
    else
      @keyword = params[:keyword]
      res = Amazon::Ecs.item_search(@keyword, {
        :search_index => ‘Music’,
        :response_group => ‘Medium’,
        :sort => ‘salesrank’
      })
      @items = []
      res.items.each do |item|
        @items << Item.new(
          item.get(‘asin’),
          item.get(‘itemattributes/title’),
          item.get(‘detailpageurl’),
          item.get_hash(‘smallimage’)
        )
      end
    end
  end
end

Viewの作成

  • layoutを作成

$ less app/views/layouts/application.rhtml
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” lang=”ja” xml:lang=”ja”>
<head>
<meta http-equiv=”Content-Language” content=”ja” />
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<meta http-equiv=”Content-Style-Type” content=”text/css” />
<meta http-equiv=”Content-Script-Type” content=”text/javascript” />
<meta http-equiv=”imagetoolbar” content=”no” />
<title>Amazon Web Service</title>
<%#= stylesheet_link_tag “screen”, :media => “all” %>
</head>
<body>
  <%= @content_for_layout %>
</body>
</html>

  • 検索/結果ページを作成

$ less app/views/amazon/index.rhtml
<p>Amazonからデータを取得</p>
<%- form_tag :controller => ‘amazon’, :action => ‘index’ do -%>
  <%= text_field_tag “keyword”, @keyword %><%= submit_tag “アマゾンで検索” %>
<%- end -%>

<%- if @items && @items.size > 0 -%>
<p>検索結果</p>
<table>
  <%- @items.each do |item| -%>
  <tr>
    <td><%= link_to(image_tag(item.image[:url], :size => “#{item.image[:width]}x#{item.image[:height]}”, :alt => item.title), item.url, :target => ‘_blank’) %></td>
    <td><%= item.asin %></td>
    <td><%= item.title %></td>
  </tr>
  <%- end -%>
</table>
<%- end -%> 

Webrickを起動 

$ script/server  

http://localhost:3000/amazonにアクセスすると検索ボックスが表示されますので、検索したいアーティス名を入力し、「アマゾンで検索」ボタンを押下すれば、Amazonから検索された商品が表示されます。

amazon_ecs
記事を共有

最近人気な記事