如何从RSS源创建项目数据库以进行分析(而不是应用程序),更新为RSS项目发布?

时间:2012-03-07 18:38:58

标签: xml rss pubsubhubbub superfeedr

我需要从rss feed创建一个项目数据库,我希望它可以异步更新(通过push ala AJAX)而不是拉(在php中通过python / magpie抓取RSS)。数据库将用于分析而不是应用程序,因此需要进行扩展。如果有人知道一个rss提要阅读器应用程序,你只需通过xml从你的feed中导出项目,那就太好了。

我不想创建一堆服务器基础设施来让一个php rss解析器在chron作业上使用mysql,但是如果需要我会这样做。也对潜在的python解决方案感兴趣。

我看过Superfeedr / PubSubHubbub,但不确定这对我来说是否合适。

2 个答案:

答案 0 :(得分:3)

请在我的评论中添加一条盐,因为我创建了Superfeedr。无论如何,我会尽力保持客观。

如果你想扩大规模,并希望你的数据集继续加班,很可能(正如你猜测的那样)民意调查非常困难。您可能会花费大量时间处理HTTP问题和XML解析问题。在Superfeedr,我们已经在提取并解析数百万个Feed,并且没有一个星期我们没有遇到新的“物种”错误。 我有时觉得自己是亚马逊雨林中的第一个定居者

在HTTP问题中,您显然会看到一些阻止您的服务,因为他们发现您的请求过于激进,而且您还必须处理其中一些服务的停机时间,这会降低整个系统的速度。当然,我不是在讨论处理HTTP标头时的模糊性(我们知道有些服务器会对Etagetag产生影响,而有些服务器只会接受带引号的etags ...而其他人会拒绝他们......)

在XML方面,情况更糟。首先,你必须能够解析那么多你可以养活世界的汤(双关语!)。对于许多忘记转义是必需的Web开发人员来说,XML似乎是一门非常复杂的科学,名称空间有前缀,而且most <open> tag must eventually be </closed>。现在,您还必须处理RSS,ATOM或RDF的风格,并处理它们。

一旦确定了正确的格式,您还必须了解数据。我总是在feed中引用时间戳,因为人们往往会把它们弄得很糟糕。我们发现的一些Feed甚至会将“昨天”显示为<published>日期。这有多可爱?现在,对于那些机器可读时间戳的人,你会看到一些只有一个数值,其他一些与06/03/2012。即使他们使用正确的格式(未在RSS规范中指定!),人们也不会知道时区如何工作(对将来发布的东西也是如此!)甚至是夏令时。最后,这实际上是一个合法的观点:一些饲料不使用我们的格里高利历,而是使用阿拉伯日历。

差异化(识别新旧东西)也非常困难,因为时间戳是f **** ed-up,但也因为RSS 1.0没有概念。构建一个很难,因为很多人会在链接中,甚至在他们的条目主体中放置跟踪代码(更改!):(

简而言之,轮询一团糟,而且很难大规模处理。现在,如果你走这条路,请使用PubSubHubbub开放协议。这对你来说只是一小步,但对于webmanity迈出了一大步,因为它将会越来越多地采用,如果一切顺利,我们最终可能会完成轮询。好消息是很多平台采用了它,这应该会显着降低您的投票需求。

您尝试构建的内容对我来说并不明显,但我相信使用像Superfeedr这样的解决方案是一种很好的方法。我们将处理所有HTTP问题,并尽可能地规范化XML,以便您更容易使用(我们甚至可以将其转换为JSON)。是的,我们会对我们的服务收费,但也会节省很多时间,以便您可以专注于使您的服务/数据存储与其他人真正不同的原因。

答案 1 :(得分:0)

通常通过HTTP GET访问Feed,因此除非您愿意使用第三方应用程序(例如Superfeedr),否则实际上没有推送选项。

话虽如此,拉动选项并不算太糟糕。这取决于您想要聚合的数据量。对于“读取和导出”,大多数桌面反馈器可能在数量上存在问题,但是没有像Venus那样的所有GUI开销的东西可能会让你走很长的路。

Feed格式和质量的变化是一个大问题,但有些库可以照顾这一点 - Python feedparser特别好。

设置Feed轮询并通过解析器将结果推送到DB中并不需要太多代码。 (如果您自己设置了轮询,请务必检查ETags和Last Modified标头 - 或者让feedparser do it for you)。