Skip to content

Latest commit

 

History

History
307 lines (209 loc) · 7.51 KB

README.md

File metadata and controls

307 lines (209 loc) · 7.51 KB

sinatraで楽天APIを利用したWebアプリを作る

目的

楽天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

Livereload 環境にする

$ guard init
$ foreman start

Gemfileの作成

  • Gemfile

  • bundle installを実行

  • ローカルで動作を確認する

      $ foreman start
    

Heroku用Procfileの編集

  • Procfile

      web: bundle exec ruby main.rb -p $PORT
    

Gitレポジトリの作成

$ git add .
$ git commit -a -m "init"

ログイン

$ heroku login

Herokuにデプロイ

$ 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

設定

市場商品の検索

ジャンル

市場商品ランキング

  • コントローラ修正

      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
    

csvライブラリを読み込めるようにする

参照

楽天WEB SERVICE

Ruby SDK

GitHub

janko-m / sinatra-activerecord