【问题标题】:How to archive an RSS feed?如何归档 RSS 提要?
【发布时间】:2012-05-01 20:46:11
【问题描述】:

我需要获取一些 RSS 提要,并将添加到其中的所有项目存档。我以前从未使用或创建过 RSS,但我知道 xml,所以格式看起来很直观。

我知道如何解析提要:How can I get started making a C# RSS Reader?

我知道我不能依赖提要服务器来提供完整的历史记录:Is it possible to get RSS archive

我知道我必须有一些关于重复的自定义逻辑:how to check uniqueness (non duplication) of a post in an rss feed

我的问题是,我怎样才能确保我不会错过任何物品?我最初的计划是编写一个解析器,其中对于提要中的每个项目: 1)检查它是否已经在存档数据库中 2)如果没有,将其添加到数据库中 如果我安排它每天运行一次,我可以确信我不会遗漏任何物品吗?

【问题讨论】:

    标签: rss


    【解决方案1】:

    这取决于提要,一些网站非常频繁地发布文章,并且可能将其 RSS 提要配置为仅显示 10 篇最新文章。有些网站会做相反的事情。

    理想情况下,您的应用应该从网站“学习”频率,并根据学习到的频率调整自身以 ping 这些网站。 (例如:如果您每次 ping 都看到新的独特文章,则需要更频繁地 ping,另一方面,如果您多次尝试看到同一组文章,您可能会在下次退出)。

    【讨论】:

      【解决方案2】:

      如果您愿意为此依赖服务...我建立了自己的 RSS 存档服务 (https://app.pub.center)。您可以通过我们的 API 访问 RSS 提要的数据。

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

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

      REST API 是免费的。我们有推送通知(电子邮件、短信、您的自定义 API 端点)的定价计划

      【讨论】:

        【解决方案3】:

        根据 Feed 和存储限制做出一系列决策。例如:

        连接到 Web 站点,并下载提要的 XML 源。提要下载引擎仅通过 HTTP 或安全超文本传输​​协议 (HTTPS) 协议下载提要和附件。 将提要源转换为 Windows RSS 平台本机格式,该格式基于 RSS 2.0 和附加的命名空间扩展。 (本机格式本质上是所有受支持格式的超集。)为此,Windows RSS 平台需要 Microsoft XML (MSXML) 3.0 SP5 或更高版本。 将新的提要项目与提要商店中的现有提要项目合并。 当接收到预定的最大数量的项目时,从源存储中清除旧项目。 或者,使用后台智能传输服务 (BITS) 安排附件的下载。

        充分利用 HTTP 以尽量减少浪费的带宽:

        为了限制其对服务器的影响,Feed 下载引擎在 HTTP (RFC3229) 万维网链接中实现了 HTTP 条件 GET 与 Delta 编码相结合。此实现允许服务器传输更改的最小描述,而不是传输缓存在客户端上的全新资源实例。该引擎还支持使用 Microsoft Win32 Internet (WinInet) 的 HTTP gzip 支持进行压缩。

        成功同步意味着 Feed 已成功下载、验证、转换为原生格式并合并到商店中。响应 HTTP 条件 GET(If-Modified-Since、If-None-Match、ETag 等)的 HTTP 304 Not Modified 服务器响应也构成成功。

        并定义移除标准:

        以下属性直接影响同步操作后剩余的项目数。 PubDate——用于确定项目的“年龄”。如果未设置 PubDate,则使用 LastDownloadTime。如果提要是列表,则项目的顺序是预先确定的,并且忽略 PubDate(如果存在)。 MaxItemCount - 限制归档项目数量的每个提要设置。提要的 ItemCount 永远不会超过最大值,即使可以从提要中下载更多项目也是如此。 ItemCountLimit — 任何一个 Feed 的项目上限,通常定义为 2500。MaxItemCount 的值不得超过此限制。将 MaxItemCount 设置为 ItemCountLimit 以保留尽可能多的项目。

        参考文献

        【讨论】:

          猜你喜欢
          • 2021-06-23
          • 2012-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-08
          相关资源
          最近更新 更多