3

以下代码从要点开始,Feedzirra用于从 RSS 提要获取更新的内容:

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之前(几分钟或几小时前)返回的对象传递Feedzirra::Feed.fetch_and_parse(feed_url)Feedzirra::Feed.update,不是吗?如果我使用刚刚 fetch_and_parse 的提要,它如何知道它是否已更新?

4

1 回答 1

0

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

如果您既没有 etag 也没有 last modified 字段,或者因为这是您的第一次访问,或者因为该站点没有提供它们,那么 Feedzirra::Feed.fetch_and_parse 会从该站点提取所有可用条目。这对于第一次访问是有意义的。这对后续访问来说意义不大,但如果网站不支持它,你能做什么?

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

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

于 2013-10-04T15:59:33.360 回答