その他
    ホーム 技術発信 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