代码之家  ›  专栏  ›  技术社区  ›  Ecognium

使用feedzirra检查更新的RSS源

  •  2
  • Ecognium  · 技术社区  · 15 年前

    我正在使用feedzirra解析我的RSS提要,它工作得非常好——在我的初始测试中,它是feed normalizer的两倍。更重要的是,它有很好的包装器,可以检查提要中的更新条目。当我使用它的feed更新方法时,我遇到了一些问题:

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

    上面的代码打印正确的etag(用firebug检查)。现在,当我想检查更新时,Feedzirra会询问您当前的etag s、上次修改的日期等。当我给它正确的etag时,它会说没有更新——这太好了。但是,如果我没有指定etag,它就不会在获取所有提要之后获取最新的etag。这是一个问题,因为如果发生更新,并且我有一个过时的etag,我将永远无法获取当前的etag,除非调用fetch ou和ou parse,这是对另一个fetch的浪费。

    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,因为etags在TechCrunch中经常更改。

    我得到的输出是:

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

    我是不是做错了什么,用错了函数?或者这是程序的错误?关于如何查找更新的源还有其他建议吗?

    顺便说一句,我还尝试使用“上次修改日期”值,它总是认为有新条目,即使日期与标题响应匹配。

    谢谢, -e

    更新: 在输出中,我错误地键入了25以上的空白行。我现在已经修好了。对不起的。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Ecognium    15 年前

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

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

    feed.update_from_feed(updated_feed) 
    

    我添加了这一行:

    feed.etag = updated_feed.etag 
    

    我仍然没有找到解决上次修改过的问题的方法,但目前ETags正在工作。