2011-08-20 91 views
1

我使用Ruby 1.8.7的RSS :: Parser,是stdlib的一部分。我是Ruby的新手。Ruby RSS :: Parser.to_s默默失败?

我想解析RSS提要,对数据进行一些更改,然后输出它(如RSS)。

docs说我可以使用'#to_s',但它似乎与一些饲料,但不是其他人。

这工作:

#!/usr/bin/ruby -w 

require 'rss' 
require 'net/http' 

url = 'http://news.ycombinator.com/rss' 
feed = Net::HTTP.get_response(URI.parse(url)).body 

rss = RSS::Parser.parse(feed, false, true) 

# Here I would make some changes to the RSS, but right now I'm not. 

p rss.to_s 

返回预期输出:XML文本。

这种失败:

#!/usr/bin/ruby -w 

require 'rss' 
require 'net/http' 

url = 'http://feeds.feedburner.com/devourfeed' 
feed = Net::HTTP.get_response(URI.parse(url)).body 

rss = RSS::Parser.parse(feed, false, true) 

# Here I would make some changes to the RSS, but right now I'm not. 

p rss.to_s 

没有返回值(空引号)。

然而,如果我改变最后一行:

p rss 

我可以看到物体充满了所有的饲料数据。这是to_s方法失败。

  1. 为什么?
  2. 我怎样才能得到某种错误输出来调试这样的问题?

回答

0

从我可以告诉,问题不在to_s,它在解析器本身。步入parser.rb代码的方式显示没有返回任何内容,因此返回空字符串的to_s是有效的。

我建议看看像Feedzirra

另外,作为参考,请查看Ruby的Open::URI模块,以便轻松检索网络资产,如订阅源。 Open-URI很简单,但对于大多数任务来说足够了。 Net :: HTTP是较低的级别,这将要求您输入更多的代码来替换Open-URI的功能。

0

我有同样的问题,所以我开始调试代码。我认为ruby rss有太多需要的元素。频道需要有“标题,链接,描述”,如果缺少to_s将失败。

例子中的第二进上述缺失的描述,这将使得to_s失败...

我相信这是一个错误,但我真的不明白的代码,几乎红宝石所以谁知道。即使缺少一些元素,对我来说,to_s似乎也很自然。

无论哪种方式

rss.channel.description = “东西” rss.to_s

将 “工作”

问题在于高清have_required_elements?

或在 self.class ::型号