楽天APIを利用したWebアプリを作成して公開する
ソフトウェア | バージョン | 備考 |
---|---|---|
OS X | 10.8.5 | |
ruby | 1.9.3-p392 | |
rvm | 1.24.0 | |
sinatra | 1.4.4 | |
thin | 1.6.0 | |
heroku-toolbelt | 3.1.1 |
- 楽天登録済み
- Heroku登録済み
$ rvm use ruby-1.9.3-p392
$ rvm gemset create sinatra_rakuten_api
$ rvm use ruby-1.9.3-p392@sinatra_rakuten_api
$ gem install bundler
$ bundle init
bash-3.2$ tree
.
├── Gemfile
├── Guardfile
├── Procfile
├── README.md
├── config.ru
├── main.rb
├── public
│ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap.css
│ │ ├── bootstrap.min.css
│ │ └── custom.css
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ └── js
│ ├── bootstrap.js
│ └── bootstrap.min.js
└── views
├── index.erb
└── layout.erb
$ guard init
$ foreman start
-
bundle installを実行
-
ローカルで動作を確認する
$ foreman start
-
web: bundle exec ruby main.rb -p $PORT
$ git add .
$ git commit -a -m "init"
$ heroku login
$ heroku create
$ git push heroku master
$ heroku ps:scale web=1
$ Scaling dynos... done, now running web at 1:1X.
$ heroku ps
=== web (1X): `bundle exec ruby web.rb -p $PORT`
web.1: up 2013/12/12 11:01:48 (~ 7m ago)
$ heroku open
-
Gemfileに追加
gem 'rakuten_web_service'
-
get '/item_search' do @items = RakutenWebService::Ichiba::Item.search(:keyword => 'Ruby') # This returns Enamerable object erb :item_search end
-
get '/genre_search' do # root genre @root = RakutenWebService::Ichiba::Genre.root erb :genre_search end
-
get '/item_ranking' do # 30代男性 のランキングTOP 30 @rankings = RakutenWebService::Ichiba::Item.ranking(:age => 30, :sex => 0) erb :item_ranking end get '/genre_ranking' do RakutenWebService::Ichiba::Genre.root # "水・ソフトドリンク" ジャンルのTOP 30 @rankings = RakutenWebService::Ichiba::Genre[100316].ranking erb :genre_ranking end
-
ビュー追加
-
Gemfileを編集する
gem "sinatra-activerecord" gem "sqlite3" gem "rake"
-
config.rbを編集する
require "sinatra/activerecord" set :database, "sqlite3:///rakuten_api.sqlite3"
-
Rakefileを追加する
require "sinatra/activerecord/rake" require "./main"
-
Profileを修正する
web: bundle exec rackup config.ru -p $PORT
-
動作確認
$ rake -T $ foreman start
-
マイグレーションファイル作成
$ rake db:create_migration NAME=item_searches
-
マイグレーションファイル編集
class ItemSearch < ActiveRecord::Migration def change create_table :item_searches do |t| t.string :name t.decimal :price end end end
-
マイグレーション実行
$ rake db:migrate
-
モデルファイルを作成
class ItemSearch < ActiveRecord::Base validates_presence_of :name end
-
get '/create' do erb :create end post '/create_item_search' do @items = RakutenWebService::Ichiba::Item.search(:keyword => 'Ruby') @items.first(10).each do |item| search_item = ItemSearch.find_by_name(item.name) || ItemSearch.new search_item[:name] = item.name search_item[:price] = item.price search_item.save end redirect '/item_search_data' end get '/item_search_data' do @items = ItemSearch.all erb :item_search end
-
require 'csv' require 'kconv'
-
def self.to_csv(options = {}) csv_data = CSV.generate(options) do |csv| csv << column_names all.each do |account| csv << account.attributes.values_at(*column_names) end end csv_data = csv_data.tosjis end
-
get '/csv/:file' do file = @params[:file] content_type 'text/csv' attachment file + '.' + 'csv' case file when 'ItemSearch' then ItemSearch.to_csv end end
-
<a href="<%= @item_search_data_download_link %>">csvダウンロード</a>