Prev / Next

2008-12-30 / ナタリーのマイレポートを rss で取得する

ナタリーのマイレポート(http://natalie.mu/my/report)の feed がないので,
rss を生成する script を書いてみた.

Plagger なら MixiScraper のような感じでやればいいんだろうけど,
よくわかっていないので,Ruby ででっちあげてみた.

流れとしては以下のような感じ.
1. WWW::Mechanize でログインして http://natalie.mu/my/report を取得
2. nokogiri と正規表現で適当に切り出し
3. RSS::Maker で rss を生成




1. WWW::Mechanize でログインして http://natalie.mu/my/report を取得

これはよくある WWW::Mechanize の例のとおり.

agent = WWW::Mechanize.new
login_page = agent.get("https://natalie.mu/user/login")
login_form = login_page.forms.first
login_form['nickname'] = "nickname"
login_form['password'] = "password"
agent.submit(login_form)
my_page = agent.get("http://natalie.mu/my/report")
body = my_page.body




2. nokogiri と正規表現で適当に切り出し

1 で取得した body を nokogiri に渡して xpath で切り出し.
30 件表示されるので,"(1..30)"の決めうちでにして,
以下のような感じで取得.

doc = Nokogiri::HTML(body)
(1..30).each do |i|
  t =  doc.xpath("/html//table/tr[#{i}]/td[1]/p")
end


これで,記事タイトルと概要がとれるので,正規表現でさらに切り出す
(この辺も xpath でなんとかできるの?).



3. RSS::Maker で rss を生成

よくある例のとおり,とりあえず,以下のような感じで.

rss = RSS::Maker.make("2.0") do |maker|
  maker.channel.about = ""
  maker.channel.title = "natalie my report"
  maker.channel.link = "http://natalie.mu/my/report"
  maker.channel.description = "natalie my report"

  item = maker.items.new_item
  item.title = title
  item.link = link
  item.description = description
end

puts rss.to_s




これを plagger に渡して EntryFullText で全文取得できれば便利なんだけど,
その辺はわからないので,次回に.

Referrer (Inside):
[2009-01-02-4] ナタリー用に Plagger の EFT を書いてみた
comments powered by Disqus