hpricot でフィードを作るプラグイン
PRagger でフィードを作成する Feed::custom_feed プラグインでは、ドキュメントのパースに正規表現を使います。しかし、フィードの作成元となるドキュメントは、htmlであることが多いような気がするので、hpricot でパース出来ると便利です。
というわけで、Feed::custom_feed を改造して、hpricot の記法でパースするプラグインを作ってみました。
require 'open-uri' require 'kconv' require 'hpricot' def custom_feed_hpricot(config,data) open(config['url']){|r| data = [r.read.toutf8] } if config['url'] items = [] data.each do |input| items = Hpricot(input).search(config['split']) if config['split'] end if config['title'] items.each do |i| title = i.search(config['title']) i.instance_eval do @title = title.inner_text.strip.gsub(/\s+/, " ") def title @title end end end end if (config['date']) items.each do |i| date = i.search(config['date']) i.instance_eval do @date = Time.parse(date.inner_text) def date @date end end end end if config['link'] and config['url'] items.each do |i| link = i.search(config['link'])[0][:href] i.instance_eval do @link = URI.parse(config['url']) + link def link @link end end end end if config['description'] items.each do |i| description = i.search(config['description']) i.instance_eval do if config['html_description'] @description = description.inner_html else @description = description.inner_text end def description @description end end end end return items end
これを使って、RHEL5 のアドバイザリのフィードを作る設定例は、以下のとおりです。
かなりすっきりと書けます。
- module: Feed::custom_feed_hpricot config: url: https://rhn.redhat.com/errata/rhel-server-errata.html split: "tbody/tr" title : "/" link: "a" date: "td[5]/" description: "/" - module: RSS::save config: title: Red Hat Enterprise Linux (v. 5 server) General Advisories link: https://rhn.redhat.com/errata/rhel-server-errata.html filename: rhel-server-errata.rdf