如何获取RSS源上的所有旧项目?

时间:2009-02-23 04:40:23

标签: rss

我一直在尝试编写自己的RSS阅读器。我可以处理“解析XML”位。我遇到的问题是“如何获取较旧的帖子?”

大多数RSS Feed仅列出其XML文件中的10-25个最新项目。如何获取所有 Feed中的项目,而不仅仅是最新的项目?

我能找到的唯一解决方案是使用“非官方”的Google阅读器API,就像

http://www.google.com/reader/atom/feed/http://fskrealityguide.blogspot.com/feeds/posts/default?n=1000

我不想让我的应用程序依赖于Google阅读器。

还有更好的方法吗?我注意到在Blogger上,我可以做“?start-index = 1& max-results = 1000”,在WordPress上我可以做“?paged = 5”。有没有一般的方法来获取RSS提要,以便它给我一切,而不仅仅是最近的项目?

7 个答案:

答案 0 :(得分:63)

RSS / Atom供稿不允许检索历史信息。如果他们想要的话,可以由Feed的发布者提供,例如您在上面提供的博客或wordpress示例中。

Google阅读器提供更多信息的唯一原因是它从第一次出现时就记住了它。

有一些关于像extension to the ATOM protocol这样谈论过的信息,但我不知道它是否实际上是在任何地方实现的。

答案 1 :(得分:9)

根据我使用RSS的经验,Feed由最后X个项目编译,其中X是变量。某些Feed可能有完整列表,但为了带宽,大多数地方可能仅限于最后几个项目。

谷歌阅读器拥有旧信息的可能答案是,它会在以后为用户存储它。

答案 2 :(得分:7)

除了David Dean所说的RSS / Atom提要只包含当时Feed的发布者所拥有的内容,并且有人需要积极收集此信息才能获得任何历史信息。基本上谷歌阅读器是免费的,当你与它进行交互时,你可以从谷歌数据库服务器检索这个存储的信息。

现在他们已经退役了,据我所知,你有两个选择。您必须从您感兴趣的Feed中开始收集此信息并使用XML或其他类型存储数据,或者您可以从销售此类存档Feed信息的公司之一支付此数据。

我希望这些信息有助于某人。

肖恩

答案 3 :(得分:4)

正如此处提到的其他回复一样,Feed可能无法提供存档数据,但可能会从其他来源提供历史项目。

Archive.org的Wayback Machine有一个API来访问历史内容,包括RSS提要(如果他们的机器人已经下载了它)。我创建了使用此API重新生成包含连锁历史项的Feed的网络工具Backfeed。如果您想详细讨论实施,请与我们联系。

答案 4 :(得分:3)

在最初询问问题时可能无法提供的另一种可能的解决方案,并且不需要任何特定服务。

  1. 找到所需RSS源的网址,并使用waybackpack获取该Feed的已归档网址。
  2. 使用FeedReader或类似的库来下载已存档的RSS Feed。
  3. 从每个Feed获取网址并根据需要抓取它们。如果你回到过去,可能会有一些死链接。

答案 5 :(得分:2)

以前的所有答案或多或少都依赖于现有服务,仍然可以使用该Feed或Feed引擎的副本,以便能够动态提供旧项目。

虽然是另一种,但却是主动且相当理论化的方式:让你的feedreader使用一个缓存代理,它在语义上理解RSS和/或Atom提要并将它们缓存在每个项目的基础上您配置的项目数量。

如果Feedreader没有定期轮询Feed,代理可以根据自己的时间提取已知Feed,以便不会错过高度易变的Feed中的项目,例如来自User Friendly的项目,只有一个项目并且每个项目都会更改一天(或至少习惯这样做)。因此,如果feedreadere.g。当您离开几天时,网络连接崩溃或丢失,您可能会丢失Feedreader缓存中的项目。让代理定期获取这些源(例如,从数据中心而不是在家中或在服务器而不是笔记本电脑上),您可以轻松地运行feedreader,而不会丢失在feedreader提取Feed后发布的项目最后一次,但在下次再拿到它们之前再次旋转。

我将该概念称为语义Feed代理,并且我已经实现了proof of concept implementation called sfp。它虽然不仅仅是一个概念证明,但我还没有进一步发展它。 (所以我对有类似想法或目的的项目的提示感到高兴。: - )

答案 6 :(得分:1)

RSS / Atom标准没有办法查询较旧的RSS文章。

我也在研究RSS阅读器,并决定建立自己的RSS档案服务(https://app.pub.center)。它可以免费使用REST API。我们收取推送通知的费用。

该服务每日轮询它的RSS源目录,并缓存文章。然后,您可以按时间顺序返回这些文章。例如:

大西洋的第1页https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

大西洋第2页https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2