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

Posted

技术标签:

【中文标题】如何获取 RSS 提要上的所有旧项目?【英文标题】:How Do I Fetch All Old Items on an RSS Feed? 【发布时间】:2010-10-09 06:13:43 【问题描述】:

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

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

我能找到的唯一解决方案是使用“非官方”Google Reader API,类似于

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

我不想让我的应用程序依赖于 Google Reader。

有没有更好的方法?我注意到在 Blogger 上,我可以执行“?start-index=1&max-results=1000”,而在 WordPress 上,我可以执行“?paged=5”。是否有任何通用的方法来获取 RSS 提要,以便它为我提供所有信息,而不仅仅是最近的项目?

【问题讨论】:

对于那些感兴趣的人,非官方阅读器 API 文档:code.google.com/p/google-reader-api/w/list 自从大约 6 年前提出这个问题以来,有没有新的方法,比如 Feedly 剂量 我很想看到这个问题的更新答案。如果 8 年没有任何改变,那真是太令人失望了!这是我见过的唯一新发展:app.pub.center***.com/questions/5761954/… 【参考方案1】:

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

谷歌阅读器拥有更多信息的唯一原因是它从第一次出现时就记住了它。

在extension to the ATOM protocol 中提到了类似这样的一些信息,但我不知道它是否真的在任何地方实现。

【讨论】:

【参考方案2】:

正如这里提到的其他回复,提要可能不提供档案数据,但历史项目可能可从其他来源获得。

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

【讨论】:

哎呀!找到了。此链接详细说明ws-dl.blogspot.fr/2013/07/… 具体来说,你会做这样的事情web.archive.org/web/timemap/link/$url 谢谢!【参考方案3】:

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

对于拥有旧信息的谷歌阅读器来说,可能的答案是它会将其存储在其一侧以供以后用户使用。

【讨论】:

【参考方案4】:

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

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

我希望这些信息对某人有所帮助。

肖恩

【讨论】:

【参考方案5】:

另一个潜在的解决方案在最初提出问题时可能不可用,并且不需要任何特定服务。

    找到您想要的 RSS 提要的 URL,并使用 waybackpack 获取该提要的存档 URL。 使用FeedReader 或类似的库来下拉存档的 RSS 提要。 从每个提要中获取 URL,然后根据需要抓取它们。如果您要回到过去,可能会有一些死链接。

【讨论】:

这是一个绝妙的建议。 Wayback Machine 确实也归档 RSS 提要。它不适用于 GUI 提要阅读器,但对于程序化阅读器而言,覆盖 Web 请求并提供缓存的 RSS/Atom 文件并不会太麻烦。 @Alex,你能举例说明一下吗?我觉得你的建议很有趣。 @SanMelkote 我很久没有考虑过这个问题了。我会尽量记住挖掘我的代码,如果我能找到它,我会把它作为 github gist 发布。【参考方案6】:

所有以前的答案或多或少都依赖于现有服务来保持该提要的副本或提要引擎能够动态地提供较旧的项目。

还有另一种公认的积极主动且相当理论化的方法:让您的 feedreader 使用缓存代理,该代理在语义上理解 RSS 和/或 Atom 提要,并将它们缓存在每个项目的基础上,最多为尽可能多的项目你配置。

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

我将此概念称为语义提要代理,并且我已经实现了proof of concept implementation called sfp。虽然它只是一个概念证明,但我还没有进一步开发它。 (所以我很乐意为具有相似想法或目的的项目提供提示。:-)

【讨论】:

以上是关于如何获取 RSS 提要上的所有旧项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 RSS 源获取全文:Android 和 IOS

如何从 php 中的 rss 提要获取图像

如何在 2015 年 4 月 20 日之后获取 Youtube 频道 RSS 提要(没有 v3 API)?

从 RSS 提要获取实际内容

获取一个RSS提要,用循环显示项目

从 Feedburner RSS 提要中获取原始 XML 数据