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


117

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

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

我能找到的唯一解决方案是使用“非官方” Google阅读器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 feed,以便它提供给我所有内容,而不仅仅是最新的内容?


1
对于那些感兴趣的人,非官方阅读器API文档:code.google.com/p/google-reader-api/w/list
Nate Parsons

3
自从大约6年前提出问题以来,是否有其他新方法,例如Feedly剂量
shareef 2015年

我希望看到这个问题的最新答案。如果8年没有任何变化,这将非常令人失望!这是唯一的新的发展中,我所看到的:app.pub.center stackoverflow.com/questions/5761954/...
杰斯里德尔

Answers:


65

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

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

关于ATOM协议扩展,有一些类似的信息,但是我不知道它是否实际上在任何地方实现。


10

正如此处提到的其他答复一样,提要可能未提供存档数据,但历史项目可能会从其他来源获得。

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


3
哎呀!找到了。该链接详细描述了ws-dl.blogspot.fr/2013/07/…特别是,您将执行以下操作:web.archive.org/web/timemap/link/$url谢谢!
The1nk

8

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

具有旧信息的google reader的可能答案是,将其存储在一边供用户稍后使用。


8

除了David Dean所说的以外,RSS / Atom提要仅包含提要的发布者当时所拥有的内容,并且有人需要积极地收集此信息以获取任何历史信息。基本上,Google阅读器是免费的,当您与之交互时,您可以从google数据库服务器中检索此存储的信息。

现在他们已经退休了,据我所知,您有两种选择。您要么必须开始从感兴趣的提要中收集这些信息,然后使用XML或类似的方式来存储数据,要么可以从出售这种类型的已归档提要信息的一家公司中购买该数据。

希望这些信息对您有所帮助。

塞恩


6

最初提出问题时可能还没有可用的另一种可能的解决方案,不需要任何特定的服务。

  1. 找到所需的RSS feed的URL,然后使用waybackpack获取该feed的存档URL。
  2. 使用FeedReader或类似的库来下拉已归档的RSS feed。
  3. 从每个提要中获取URL,然后根据需要对其进行抓取。如果您想让时光倒流,则可能是某些无效链接。

这是一个绝妙的建议。Wayback Machine确实也可以存档RSS feed。它不适用于GUI提要阅读器,但是对于编程阅读器而言,重写Web请求并为它提供缓存的RSS / Atom文件并没有太大的麻烦。
塞林

@Alex,您能举例说明一下吗?我觉得你的建议很有趣。
SanMelkote

2
@SanMelkote我好久没有想过了。我会尽量记住去挖掘我的代码,如果可以找到它,我会将其发布为github要点。
Alex Klibisz

2

RSS / Atom标准没有查询旧版RSS文章的方法。

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

该服务每天轮询其RSS feed的目录,并缓存文章。然后,您可以按时间顺序重新获得这些文章。例如:

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

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


看起来很有趣,但链接已消失。
bluenote10

2

先前的所有答案或多或少都依赖现有服务来仍然具有该提要或提要引擎的副本,以便能够动态提供较旧的项目。

尽管还有另一种公认的主动方式,但在理论上是这样的方式:让您的feedreader使用一个缓存代理,该代理在语义上理解RSS和/或Atom提要,并在每个项目的基础上缓存它们,最多可以配置您所配置的项目。

如果feedreader不能定期轮询feed,则代理可以根据自己的时间获取已知的feed,以免错过高波动性feed中的一项,例如User Friendly的只有一项并且每天更改(或至少每天更改一次)曾经这样做)。因此,如果feedreader.g。几天不在时,网络连接崩溃或丢失,则可能会使FeedReader缓存中的内容丢失。使用代理定期提取这些提要(例如,从数据中心而不是在家中或在服务器上而不是笔记本电脑中)可以使您轻松地运行提要阅读器,并且在不丢失提要阅读器获取提要之后发布的项目的情况下上一次,但再次轮换出来,下次再获取它们。

我将该概念称为语义提要代理,并且已经实现了名为sfp的概念证明实现。尽管它不仅仅只是概念证明,而且我还没有进一步发展它。(因此,对于具有相似想法或目的的项目的提示,我将感到高兴。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.