Yahoo!PipesからJSONをとってきてごにょごにょ

某サイトのRSSからYahoo!Pipesを使って必要な情報を抜いてくることをしていたんだけど、Yahoo!Pipesのフィルターで日本語が通らないみたいなので途中まではYahoo!Pipesにやらせて後は自分でごにょごにょすることにした。久々に家でコードを書いたので載せとく。
Yahoo!Pipesからはいくつかの形式でデータを取れる。最初はRSSでとってこようとしたけれど取れないデータがいくつかあったのでJSON形式でデータをとることにした。JSONパーサはこちら→http://webos-goodies.jp/archives/51019710.html の方がスニペットとして公開されているのを使わせていただいた。jsonparser.rbという名前で保存してライブラリパスに置いた。
書いたコードは以下。

#!/usr/local/bin/ruby
require 'open-uri'
require 'jsonparser'
require 'erb'

def get_json_items(uri)
  src = open(uri).read
  parser = JsonParser.new
  json = parser.parse(src)
  items = []
  json['value']['items'].each do |i|
    item = {}
    item[:title]   = i['title']
    item[:pubdate] = i['pubDate']
    item[:date]    = i['dc:date']
    item[:yosan]   = i['yosan']
    item[:description] = i['description']
    item[:finish]  = i['dc:finish']
    item[:pref]    = i['dc:pref']
    item[:link]    = i['link']
    items.push(item)
  end
  items
end

def filter_items(items)
  filtered = []
  items.each do |i|
    filtered.push(i) if i[:pref].match('東京都')
    filtered.push(i) if i[:pref].match('福岡県')
    filtered.push(i) unless i[:yosan].match('以下')
  end
  filtered
end

def format_items(items)
  tmpl =%q{
    <% items.each do |i| %>
      <a href="<%= i[:link] %>"><%= i[:title]%></a><br />
      <%= i[:pref] %>&nbsp;<%= i[:yosan] %><br />
      締め切り:<%= i[:finish] %><br />
      <%= i[:description] %><br />
      投稿:<%= i[:pubdate] %><br /><br />
    <% end %>
  }
  erb = ERB.new(tmpl) 
  html = erb.result(binding)
end

uri = 'http://pipes.yahoo.com/pipes/pipe.run?_id=5e72e20448cb9daf5693cf0c61034b7a&_render=json'
items = get_json_items(uri)
exit if items.length == 0
items = filter_items(items)
html  = format_items(items)
puts html

JSONをHTMLに整形しなおしただけ。JSONパーサが使いやすかったので簡単に書けた。