目次
この記事はアピリッツの技術ブログ「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から検索された商品が表示されます。