Ruby on rails 使用RubyonRails进行高性能RSS/Atom解析

Ruby on rails 使用RubyonRails进行高性能RSS/Atom解析,ruby-on-rails,ruby,Ruby On Rails,Ruby,我需要解析数千个提要,性能是一个基本要求。你有什么建议吗 提前谢谢 不确定性能,但在 您还可以研究Hpricot,它解析XML,但假设XML格式良好,不进行任何验证 我没有尝试过,但最近我读到了(它声称是为性能而设计的):- Feedzirra是一个 旨在获取和更新许多提要 尽快。这包括 通过 taf2抑制gem以实现更快的http获取, 通过nokogiri和 用于更快解析的sax机器 您可以使用RFeedParser(著名的PythonUniversalFeedParser的Ruby端口)

我需要解析数千个提要,性能是一个基本要求。你有什么建议吗


提前谢谢

不确定性能,但在

您还可以研究Hpricot,它解析XML,但假设XML格式良好,不进行任何验证


我没有尝试过,但最近我读到了(它声称是为性能而设计的):-

Feedzirra是一个 旨在获取和更新许多提要 尽快。这包括 通过 taf2抑制gem以实现更快的http获取, 通过nokogiri和 用于更快解析的sax机器


您可以使用RFeedParser(著名的PythonUniversalFeedParser的Ruby端口)。它是基于Hpricot的,而且非常快速和易于使用

例如:

require 'rubygems'
require 'rfeedparser'
require 'open-uri'

feed = FeedParser::parse(open('http://feeds.feedburner.com/engadget'))

feed.entries.each do |entry|
  puts entry.title
end

当你只有一把锤子时,一切看起来都像钉子。考虑一下露比以外的解决方案。虽然我喜欢Ruby和Rails,也不会和他们一起开发Web,或者可能是针对特定领域的语言,我更喜欢重的数据类型,可以用java描述,或者Python甚至C++。 鉴于此解析数据的目的地可能是数据库,它可以充当解决方案的Rails部分和其他语言部分之间的公共点。然后你使用最好的工具来解决你的每一个问题,结果可能更容易处理,并且真正满足你的需求


如果速度真的很重要,为什么还要在那里添加一个额外的约束条件,并说,“哦,只要我开始使用Ruby,这才是最重要的。”

最初我使用nokogiri来做一些基本的xml解析,但我切换到它时速度慢且不稳定,不仅性能得到了很大提升,没有错误,这很容易。 示例如下所示

# fetching a single feed
feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing")

# feed and entries accessors
feed.title          # => "Paul Dix Explains Nothing"
feed.url            # => "http://www.pauldix.net"
feed.feed_url       # => "http://feeds.feedburner.com/PaulDixExplainsNothing"
feed.etag           # => "GunxqnEP4NeYhrqq9TyVKTuDnh0"
feed.last_modified  # => Sat Jan 31 17:58:16 -0500 2009 # it's a Time object

entry = feed.entries.first
entry.title      # => "Ruby Http Client Library Performance"
entry.url        # => "http://www.pauldix.net/2009/01/ruby-http-client-library-performance.html"
entry.author     # => "Paul Dix"
entry.summary    # => "..."
entry.content    # => "..."
entry.published  # => Thu Jan 29 17:00:19 UTC 2009 # it's a Time object
entry.categories # => ["...", "..."]
如果您想对提要做更多的工作,例如解析它们,下面的内容就足够了

source = Feedzirra::Feed.fetch_and_parse(http://www.feed-url-you-want-to-play-with.com)
  puts "Parsing Downloaded XML....\n\n\n"

  source.entries.each do |entry|

    begin
      puts "#{entry.summary} \n\n"
      cleanURL = (entry.url).gsub("+","%2B")  #my own sanitization process, ignore
      scrapArticleWithURL(cleanURL)
  rescue
    puts "(****)there has been an error fetching (#{entry.title}) \n\n"
  end

HTML是XML的一个子集,Hpricot可以解析它。许多人使用Hpricot解析通用XML。