我正在使用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。我现在已经修好了。遗憾。
答案 0 :(得分:0)
我查看了源代码,发现etag没有正确更新。所以这似乎解决了它:
在下面一行之后(在feed.rb的add_feed_to_multi()中)
feed.update_from_feed(updated_feed)
我添加了这一行:
feed.etag = updated_feed.etag
我仍然没有找到解决last_modified问题的方法,但现在etags正在运行。