以下代码摘自Feedzirra的要旨,以从RSS feed获得更新的内容:

feed = Feedzirra::Feed.fetch_and_parse(feed_url)
feed = Feedzirra::Feed.update(feed)
do_something_with_new_feed(feed.new_entries) if feed.updated?


我不明白Feedzirra如何知道Feed已更新。我无法正常工作。为了知道,我必须将先前(几分钟或几小时前)Feed返回的Feedzirra::Feed.fetch_and_parse(feed_url)对象传递给Feedzirra::Feed.update,不是吗?如果我使用刚刚获取的Feed,如何知道它是否已更新?

最佳答案

提要(您正在访问的网站)可以但不一定维护一个或两个字段来确定它们自上次访问以来是否已更改。这些是etag,最后一次修改。如果该网站支持这两种方法中的一种或两种,那么当您访问供稿时,它们将返回给您。您的模型应该为每个感兴趣的提要维护这些字段。 Feedzirra :: Feed.update使用它们来确定自您上次访问以来是否已更新Feed。这些将允许Feedzirra :: Feed.update提取自上次访问以来新的或更改的条目。

如果您既没有etag字段又没有最后修改的字段,或者是因为这是您的首次访问,或者是因为网站没有提供这些字段,则Feedzirra :: Feed.fetch_and_parse将从网站中提取所有可用条目。这对于首次访问是有意义的。以后的访问没有意义,但是如果该网站不支持它,您该怎么办?

需要明确的是,Feedzirra :: Feed.fetch_and_parse始终提取所有可用条目。 Feedzirra :: Feed.update仅提取自为其提供etag和/或上次修改日期以来新的或更改的条目。

条目也保持更新/发布日期。

08-25 12:59