2011-08-20 89 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 ::型號