今日も元気にテクニカル

技術情報書きたいけど本ブログに書きたくないからこんな名前になりました。

日本語URLを含む「こえ部」のタグページを解析す

こえ部(http://koebu.com)で投稿数が2以上のお題を抽出したいと考えた。

最初はこんな感じでやろうとしたが…

require 'mechanize'

url = 'http://koebu.com/topic/tag/男声向け'

agent = WWW::Mechanize.new
page = agent.get(url)
puts page.body.tosjis

「指定したお題が見つかりません」と言われる。どうやら

url = 'http://koebu.com/topic/tag/男声向け'

が上手く認識できてないみたいで以下のようにURLエンコードしてもダメ。

url = 'http://koebu.com/topic/tag/%E7%94%B7%E5%A3%B0%E5%90%91%E3%81%91'

よってopen-urlを使った。(原因を問い詰めないのが俺流)

require 'open-uri'
require 'hpricot'

maxpagenum = 3
limitpost = 2

1.upto(maxpagenum) do |num|
  doc = Hpricot(open("http://koebu.com/topic/tag/%E7%94%B7%E5%A3%B0%E5%90%91%E3%81%91&page=" + num.to_s))
  (doc/%Q[li.unitTi]).each do |elem|
    if elem.inner_text.slice(%r[\((\d+)\)$], 1).to_i >= limitpost
      title = elem.to_html.slice(%r[<a href=".*?">(.*)</a>], 1)
      title = elem.inner_text
      url = "http://koebu.com/" + elem.to_html.slice(%r[<a href="(.*?)" title="], 1)
      puts title
      puts url
    end
  end
end

これでよし。