Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Rackでお天気確認ページを表示してみる

rackは

Rack provides a minimal interface between webservers supporting Ruby and Ruby frameworks.

との解説にあるように、webサーバとRubyスクリプトを結びつける役割を担います。
Rackがサーバを抽象化してくれる事で、柔軟な運用が可能となるわけです。

今回は勉強がてら、rackを使ってブラウザにお天気情報を出すスクリプトを書いてみました。

まずはrackに読み込ませるスクリプトです。
Curbをつかってlivedoorのお天気情報を貰って来ます。

# -*- coding: utf-8 -*-
require 'erb'
require 'json'
require 'curb'

class SampleApp

  def call(env)
    case env['REQUEST_METHOD']
    when 'GET'
      url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010'

      json_result = (JSON.parse!(Curl.get(url).body_str))
      body = ["Weather :: " << Time.now.strftime("%Y-%m-%d_%H:%M:%S").to_s << " "<< json_result["forecasts"][0]["telop"].to_s]
      
      [200, {"Content-Type" => "text/plain"}, body]
    else
      [200, {"Content-Type" => "text/plain"}, ['No content here']]
    end
  end
end

続いてrackの設定ファイルです。
rackupと同時にブラウザ起動させたくない場合はlaunchyまわりをコメントアウトします。*1

require './sandbox.rb'
require 'launchy'

run SampleApp.new()

Launchy.open('http://localhost:9292/')

以上を同一フォルダにおき、

$ rackup sandbox.ru

とやれば、

Weather :: 2014-04-11_23:26:18晴れ

といった感じでシンプルなテキストが出て来ます。
ここからガリガリ作り込んでいったものがsinatrarailsというわけですね。

*1:まぁ、この程度ならパイプ処理でやった方がスマートな感じはしますが