Railsで取得したRSSの記事の本来のURLをparseする方法

取得したRSSの中に広告と閲覧測定のためのタグが入っていることがある。

ある企業の場合、広告のURLとlinkタグでは閲覧測定のためのURLを挟み、本来のURLは<******:origLink>で挟むような形式にて提供している。

Railsの場合、ほとんどはRubyRSSパーサでこれを読み込もうとするが、RSSライブラリから<******:origLink>を簡単に読み込むことが出来ない。そこで、hpricotライブラリを用いて<******:origLink>タグが存在したら、そのの内容をにコピーする方針で解決を行う。

まず、gemにてhpricotライブラリを読み込む。

# Rails 2.x
# config/environment.rb
Rails::Initializer.run do |config|
  config.gem "hpricot"
  :

通常は以下のように読み込む。

rss = open(feed) do |file|
          rss_src = file.read
          RSS::Parser.parse(rss_src)
end

下記のように書き換える。

rss = open(feed) do |file|
  rss_src = file.read
  xml = Hpricot.XML(rss_src)
  xml.search("******:origLink").each do |origLink|
    origLink.parent.at("link").inner_html = origLink.inner_html
  end
  RSS::Parser.parse(xml.to_html)
end

xml.searchで<******:origLink>タグを全て列挙し、そのタグごとに内容をタグにコピーしていく。その内容をxml.to_htmlで出力を行う。