2011年11月15日火曜日

rack on openshift

openshift上でrubyを動かしてみた。
2ちゃんランキングのrssをパースしてjson(風)のものを出力するだけ。
rubyはステップ数が短ければ短いほどカッコイイらしいので頑張ってみた(うそ)。

rackのconfig.ruにこんなのを追加して
map '/get' do
  map '/ranking' do
    run Get2chRanking.new
  end
end

2ch.rbってのにこんなのを書いて
require 'rubygems'
require 'rack'
require 'rss'
require 'json'
require 'parsedate'

$ranking = 'http://2ch-ranking.net/rss/zenban.rdf'
class Get2chRanking
  def call(env)
    rss = open($ranking){ |file| RSS::Parser.parse(file.read) }

    links = []

    rss.items.each do |item|
      url = item.link.gsub(/^\s*http:\/\/.+\?thread=([^\/]+)\/(.+)\s*$/, '\1/test/read.cgi/\2')
      title = item.title.strip.gsub(/\s{2,}/, " ")
      mtime = ParseDate::parsedate(item.dc_date.to_s)
      links.push(Hash["title" => title, "url" => url, "mtime" => mtime])
    end
    links.sort! {|a, b|
      a["mtime"] <=> b["mtime"]
    }
    response = Hash["links" => links]
    [200, {"Content-Type" => "application/json"}, response.to_json]
  end
end

git push
して確認。
一応、それっぽいのが動くようになった。

http://hooligans-psychobilly.rhcloud.com/get/ranking/

と思ったら500エラーが出るようになっている。

debug時にはリモートからtailが出来るのも便利
$ rhc-tail-files --app hooligans

0 件のコメント:

コメントを投稿