如何创建RSS源中的项目数据库进行分析(不适用于应用程序),并将RSS项目更新为已发布?

问题描述:

我需要创建rss提要的项目数据库,我想它是异步更新(通过推阿拉AJAX)而不是拉(ala通过python/magpie在php中刮RSS)。数据库将用于分析而不是应用程序,因此需要进行扩展。如果有人知道一个rss feed阅读器应用程序,您可以通过xml简单地从您的feed中导出项目,那就太棒了。如何创建RSS源中的项目数据库进行分析(不适用于应用程序),并将RSS项目更新为已发布?

我不想创建一堆服务器基础结构来获取php rss解析器,以便在chron作业中使用mysql,但是如果有必要,我会这样做。也对潜在的Python解决方案感兴趣。

我看了一下Superfeedr/PubSubHubbub,但不知道这对我来说是合适的解决方案。

请在我的评论中放一个盐,因为我创建了Superfeedr。无论如何,我会尽量保持客观。

如果你想扩大规模,并希望你的数据集保持超时增长,很可能(如你所猜测的)轮询将非常困难。您可能会花很多时间处理HTTP问题和XML解析问题。在Superfeedr,我们已经提取和解析了数百万种饲料,并且没有一周我们没有遇到新的“种类”错误。 我有时觉得自己像是亚马逊雨林中的第一名。

在HTTP问题中,您显然会看到一些服务阻止您,因为他们发现您的请求过于激进,而且您还必须处理其中几个服务的停机时间,这可能会降低整个系统的速度。当然,我并不是在谈论处理HTTP头文件时的含糊之处(我们知道一些服务器在Etagetag之间有所区别,有些服务器只接受带引号的etags,而其他人会拒绝它们...... )

在XML方面,情况更糟。首先,你必须能够解析这么多的汤,这样你才有可能养活这个世界(双关语!)。 XML似乎是一个非常复杂的科学,因为许多网络开发人员忘记了转义是必要的,名称空间的前缀为,但也有most <open> tag must eventually be </closed>。现在,您还必须处理RSS,ATOM或RDF的风味,并处理它们。

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

Difficult(识别新旧东西)也非常困难,因为时间戳记已经过时了,但也因为RSS 1.0没有这个概念。建立一个很难,因为很多令人将会把跟踪代码的链接(改变!),甚至在他们的作品:(

一言以蔽之的身体,轮询很乱,非常难以处理现在如果你走这条路,请使用PubSubHubbub开放协议。这对你来说只是一小步,但对于网络管理来说是一个巨大的进步,因为它会加速采用,如果一切顺利的话,我们最终可能会进行轮询。好消息是很多平台都采用了它,这将大大降低您的投票需求。

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

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

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

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

它不需要太多的代码来设置反馈轮询并将结果通过解析器推送到数据库中。 (如果您自己设置了轮询,请务必检查ETags和上次修改的标头 - 或者让feedparser do it for you)。