NHK週刊こどもニュース「ニュースまるわかり」のフィード作成用Yapraプラグイン

「ニュースまるわかり」は以前「今週の大ハテナ」だったコーナーです。
RSS::save などに渡して使ってください。

=begin
config example:

- module: KodomoNews::hatena
  config:
    recent: 10 # optional
=end


require "rubygems"
require "yapra/plugin"
require "nokogiri"
require "pp"


FeedItem = Struct.new("Item", :title, :link, :date, :description)


def parse_time(str)
  %r{(\d\d)/(\d\d)/(\d\d)} =~ str
  Time.parse( "20%s-%s-%s" % [$1, $2, $3] )
end


def description(url)
  sleep 2
  doc = Nokogiri::HTML(open(url))
  doc.css("div#entrytxt").to_xhtml
end


def cell2item(cell)
  fi = FeedItem.new
  fi.title = cell.css("span.title").text
  url = "http://cgi2.nhk.or.jp/kdns/mwakari/" +
    cell.css("a").attr("href").text
  fi.link = url
  fi.date = parse_time(cell.css("span.date").text)
  fi.description = description(url)
  fi
end


def hatena(config, data)
  year = Time.now.year.to_s
  recent = if config && config.has_key?("recent")
             config["recent"].to_i
           else
             -1
           end

  html = open("http://cgi2.nhk.or.jp/kdns/mwakari/mwakari_list.cgi?y=#{year}").read
  doc = Nokogiri::HTML(html)
  cells = doc.css('li.cell')
  cells[0...recent].map{|cell|
    cell2item(cell)
  }
end