ちょっと寄り道で EntryFullText ぽく

寄り道をするつもりはなかったのだけれども、試したくなったので。
ruby でデータ収集処理」を EntryFullText ぽくしてみました。


実際に Plagger を使ったことがないし、見よう見まねなので、
設定と動作が本家のもの違っているかもしれませんが。
xpath はまだ実装していないし。


テスト用のサイトは音泉
結果を見てみると、スカイガールズ ラジオのタイトルが取得できてないな。

def dump(data)
  data.each {|d|
    puts "{"
    d.each_pair {|key, val|
      puts %Q{  #{key} => "#{val}"}
    }
    puts "}"
  }
end

def extract_text(text, opt, &hook)
  # argument no check

  items = opt[:extract_capture].split(/\s/)

  data = []

  text.scan(/#{opt[:extract]}/m) { |r|
    entry = {}
    0.upto(items.size - 1) {|i| 
      entry[items[i].to_sym] = Regexp.last_match(i+1)
    }

    hook.call(entry)    unless hook.nil?

    data << entry
  }

  data
end


if $0 == __FILE__
  text = ''

# File::open("onsen.html") {|f|
#   text = f.read
# }

  require 'open-uri'
  open('http://www.onsen.ag/') {|f|
    text = f.read
  }

  data = extract_text(text,
    {
      :extract            => %q{<td width="135"[^>]?>(?:(?:<.+?>)*)(.+?)(?:<.+?>)</td>.+?<td align="center"><img .+?alt="([^"]+).+?(http://[^\s]+?\.asx)},
      :extract_capture    => %q{title author link},
    }
  ) {|entry|
    # extract_after_hook
    entry[:title].strip!
  }

  dump data
end