使用Feedzirra检查更新的RSS源

时间:2010-02-01 06:08:01

标签: ruby rss feedparser

我正在使用Feedzirra来解析我的RSS源并且它运行良好 - 它在我的初始测试中是两倍快的Feed Normalizer。更重要的是,它有很好的包装器来检查feed中的更新条目。当我使用其Feed更新方法时,我遇到了一些问题:

require 'feedzirra'

feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/TechCrunch")
puts feed.etag #outputs the right tag 

以上代码打印正确的ETag(使用Firebug进行检查)。现在,当我想检查更新时,feedzirra会询问您当前的etags,最后修改日期等。当我给它正确的ETag时,它表示没有更新 - 这很好。但是,如果我没有指定ETag,它在抓取所有Feed之后不会获取最新的ETag。这是一个问题,因为如果更新发生并且我有一个过时的ETag,我将永远无法抓住当前的ETag而不是调用fetch_and_parse - 浪费了另一次获取。

feed_to_update = Feedzirra::Parser::Atom.new
feed_to_update.feed_url = "http://feeds.feedburner.com/TechCrunch"
feed_to_update.etag = nil
feed_to_update.last_modified = nil

last_entry = Feedzirra::Parser::AtomEntry.new
last_entry.url = nil 

feed_to_update.entries = [last_entry]

updated_feed = Feedzirra::Feed.update(feed_to_update)

puts updated_feed.updated?
puts updated_feed.etag

以上示例是修改后的版本,是作者文档的一部分:http://gist.github.com/132671。我也试图给出一个以前的ETag值并且它没有得到更新 - 我选择在上面的代码中使用nil,因为ETag经常为Techcrunch改变。

我得到的输出是:

true    

#note the above line is blank (basically printing nil)

我做错了什么并且以任何方式错误地使用了这些功能?或者这是程序的错误?关于如何查找更新的Feed的任何其他建议?

顺便说一下,我还尝试使用'last-modified-date'值,即使日期与标题响应匹配,它也总是认为有新条目。

谢谢, -e

更新:在输出中,我在空白行上方错误地键入了25。我现在已经修好了。遗憾。

1 个答案:

答案 0 :(得分:0)

我查看了源代码,发现etag没有正确更新。所以这似乎解决了它:

在下面一行之后(在feed.rb的add_feed_to_multi()中)

feed.update_from_feed(updated_feed) 

我添加了这一行:

feed.etag = updated_feed.etag 

我仍然没有找到解决last_modified问题的方法,但现在etags正在运行。