Rails Nokogiri检索频道标题和项目标题

时间:2014-02-19 14:41:28

标签: ruby-on-rails-3.2 rss nokogiri

所以我有以下Nokogiri rake任务:

require 'nokogiri'
require 'open-uri'

namespace :rss do
  desc "Fetch rss feed"
  task :fetch => :environment do
    doc = Nokogiri::XML(open("http://www.themusicvoid.com/feed"))
    @info = doc.xpath('//item').take(5).map do |i|
        News.create(:title => i.xpath('title').inner_text)
    end
  end
end

这让我获得了每个'Item'的标题......但我也希望每个数据库条目都包含一个名为“site”的字符串中的频道名称。

类似于:

News.create(:title => i.xpath('title').inner_text, :site => i.xpath('channeltitle').inner_text)

我完全不确定如何实现这一目标。由于频道和项目名称都是“标题”,我不确定如何让Nokogiri区分这两者。我知道我必须在xpath中的某处包含'// channel',但我不完全确定如何让nokogiri调用一个“itemtitle”和另一个“channeltitle”。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

鉴于所有项目的频道标题相同,您应该能够从doc获取频道标题,然后在每个item的迭代过程中使用它。

您可以使用以下方式获取标题:

channel_title = doc.at_xpath('rss/channel/title').inner_text

然后在每个项目的迭代中使用它:

require 'nokogiri'
require 'open-uri'

namespace :rss do
  desc "Fetch rss feed"
  task :fetch => :environment do
    doc = Nokogiri::XML(open("http://www.themusicvoid.com/feed"))
    channel_title = doc.at_xpath('rss/channel/title').inner_text
    @info = doc.xpath('//item').take(5).map do |i|
        News.create(:title => i.xpath('title').inner_text, :site => channel_title)
    end
  end
end