2010-02-01 53 views
2

我正在使用Feedzirra來解析我的RSS訂閱,它工作得非常好 - 在我的初始測試中,它的速度是FeedStateizer的兩倍。更重要的是,它有很好的包裝來檢查Feed中的更新條目。當我使用其飼料更新的方法,我遇到了一些問題:使用Feedzirra檢查更新的RSS訂閱

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,它在抓取所有提要後不會抓取最新的ETag。這是一個問題,因爲如果更新發生並且我有一個陳舊的ETag,我將永遠無法在調用fetch_and_parse之前抓住當前的ETag - 浪費了另一個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) 

難道我做錯了什麼,並以任何方式不正確使用的功能呢?或者這是該程序的錯誤?有關如何查找更新的Feed的其他建議?

順便說一句,我也試過使用'最後修改日期'的值,它總是認爲即使日期與頭部響應相匹配,也有新的條目。

謝謝, -e

更新:在輸出我已經不正確地輸入了25空白線之上。我現在已經解決了。抱歉。

回答

0

我看着源代碼,發現etag沒有被正確更新。因此,這似乎解決它:

線下後(在feed.rb的add_feed_to_multi())

feed.update_from_feed(updated_feed) 

我加入這一行:

feed.etag = updated_feed.etag 

我還沒有找到一個解決last_modified問題的方法,但現在etags正在工作。