狐の王国

人は誰でも心に王国を持っている。

それrubyなら2行で出来るよ!

HTMLのタグを除去するのは出来るんだけど、その後、それぞれの要素を整理して、あらためてHTMLのテンプレートに流し込むのができない><という記事。

せっかくRubyを使ってるんだからHpricotとERBを使いましょう。簡単に出来ます。

#!/usr/bin/ruby
require 'rubygems'
require 'hpricot'
require 'erb'
require 'kconv'

table = Hpricot(STDIN.read.toutf8).search('.section table tbody tr')
puts ERB.new(DATA.read).result(binding)

__END__
<dl>
<% table.each do |tr| %>
<dt><%= (tr/'td[2] a').inner_html %></dt>
<dd><%= (tr/'td[3]').inner_html %></dt>
<% end %>
</dl>

こんな感じ。

コード見ればわかるとおりSTDINからデータを読んでるので、以下のように実行する。

$ wget http://d.hatena.ne.jp/hrkt0115311/20090710/1247237322
$ ruby hrkt.rb <1247237322 

HpricotはCSSセレクタXPathXML/HTML要素を拾ってこれるし、ERBはRubyのコードをそのままテンプレートに埋めこむことが可能。とても便利なのでぜひぜひ使いましょう。

以下参考文献。

2018年2月追記

上の例は hpricot を使った古い例なので nokogiri を使ってはてなブックマークRSSからタイトルとURLだけ抜いてくるサンプルをここに貼っておく。

#!/usr/bin/env ruby
require 'nokogiri'
require 'erb'
require 'open-uri'

uri = 'http://feeds.feedburner.com/hatena/b/hotentry'

doc = Nokogiri::XML.parse(open(uri).read)
items = doc.css('item')
puts ERB.new(DATA.read).result

__END__
<% items.each do |item| %>
<%= item.css('title').inner_text %>: <%= item.css('link').inner_text %>
<% end %>
Sugano `Koshian' Yoshihisa(E) <koshian@foxking.org>