所以我有以下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”。任何帮助将不胜感激。
答案 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