プログラマでありたい

おっさんになっても、プログラマでありつづけたい

RailsでProduct Advertising APIを扱うAmazon ECSを使う

 個人的な理由で、Amazon Web Servicesのカートを使うアプリが必要になりました。せっかくなので、Rubyで作ってみようかと思います。Rubyでawsを使えるライブラリは以下の3つです。


 一番最後のruby-awsは、もう保守もされていないっぽいですし作り的にもイマイチのような気がします。候補としては、amazon-ecsとruby-amazonです。私の欲しいカート機能は、amazon-ecsには実装されていません。ruby-amazonはカート機能は備えていますが、元々ecs3に対応したライブラリです。作者的にはruby-aws(一番下のruby-awsとは別物)を使えとのことです。ということで、ruby-aawsを使うのが宜しいようです。


 一方、amazon-ecsはクエリーをそのまま投げることが出来るので、下記の人のように割と簡単にカート機能を自分で実装することも出来そうです。
RoRで Amazon ショッピングカート作成  カート編
調べる前にamazon-ecsを使ってみたのですが、簡単に使う事が出来ました。

install

gem install amazon-ecs

model/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_controller.rb

class AmazonController < ApplicationController
  def index
    if request.get?
    else
      @keyword = params[:keyword]
      res = Amazon::Ecs.item_search(@keyword, {
        :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/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 -%>