Written by: on 2008/05/20 @ 1:51 AM

コントローラにコードが多すぎですが、価格コムのapiを使用したサンプルが出来ました。


railsのアプリケーション作成

$ rails -d sqlite3 rails

名前はともかくとして、railsというプロジェクトを作成します。
コントローラの作成

$ ruby script/generate controller api

これまたapiコントローラって名前がいいか悪いかはおいといて、作成します。そして、今回はデータベースは使わないので、モデルはなしです。
あとはゴリゴリ書いてみました。
app/controller/api_controller.rb

require 'open-uri'
require 'rexml/document'
require 'pp'
class ApiController < ApplicationController
def index
end
def kakaku
search = URI.escape(params[:name])
uri = "http://api.kakaku.com/Ver1/ItemSearch.asp?Keyword=" + search
doc = REXML::Document.new(open(uri))
@products = Array.new
doc.elements.each('ProductInfo/Item') { |elem|
product = Product.new
elem.elements.each('ProductID') {|e| product.id = e.text }
elem.elements.each('ProductName') {|e| product.name = e.text }
elem.elements.each('ItemPageUrl') {|e| product.url = e.text }
@products << product
}
@products
end
end

app/views/api/index.html.erb
入力画面です。

<% form_tag :action => "kakaku" do -%>
<%= text_field_tag :name %>
<%= submit_tag 'submit' %>
<% end %>

app/view/api/kakaku.html.erb
結果を表示する画面です。

<table border="1">
<% @products.each do |p|  %>
<tr>
<td><%= p.id %></td>
<td><%= p.name %></td>
<td><a href="<%= p.url %>">url</a></td>
</tr>
<% end %>
</table>

app/model/product.rb
最後にrailsのモデルではないのですが、プロダクトというクラスを使用しているので、作成します。

class Product
attr_accessor :id, :name, :url
end

異常時の処理とか書いてませんが、これで全部です。
アプリケーションを起動して、http://localhost:3000/apiにアクセスすると動作が確認できました。
とりあえず、こういったapiを組み合わせていければ、世に言うマッシュアップなんだと思います。とはいえ、特別すごいアイデアとか出てこないんですけど...

Catogories: ruby

Leave a Reply