【问题标题】:Rails Nokogiri Retrieve both Channel Title and Item TitleRails Nokogiri 检索通道标题和项目标题
【发布时间】:2014-02-19 14:41:28
【问题描述】:

所以我有以下 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

这让我得到了每个单独的“项目”的标题...但我还希望每个数据库条目都包含一个名为“站点”的字符串中的频道名称。

比如:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    然后在每个item的迭代中使用:

    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
    

    【讨论】:

    • 甜蜜!谢谢。但最终我会有多个提要。那么如何设置格式以便获得每个提要的“站点”?
    • 您的意思是在同一个提要中有多个频道(即http://www.themusicvoid.com/feed 将有多个频道节点)还是您将遍历多个页面(例如,为http://www.themusicvoid.com/feedhttp://www.anothersite.com/feed)?
    • 多个页面:musicvoid.com/feed 和 anothersite.com/feed。
    • 对不起,我没有任何 rails/rss 经验。但是,我认为当您遍历每个页面时,您将在每次获得新页面时设置channel_titledoc
    • 酷。谢谢。没有 Rails 经验的出色工作。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2018-02-19
    相关资源
    最近更新 更多