在数据库中存储媒体RSS和iTunes播客RSS源

时间:2011-02-03 05:27:20

标签: ruby-on-rails ruby rss feedparser feedzirra

我希望能够将media RSSiTunes podcast RSS Feed存储到数据库中。这里的要求是我不想错过Feed中的任何元素或其属性。找到Feed中所有最常见的元素并将它们作为单独的列存储在数据库中是有意义的。这里的问题是可能存在可能不标准的饲料特定元素。我也想抓住它们。由于我不知道它们是什么,我不会有专门的专栏。

目前我有2个名为feed和feed_entries的表。对于像机箱,类别这样的RSS 2.0标签,我有单独的表与feed / feed_entries有关联。我使用feedzirra来解析feed。 Feedzirra要求我们知道我们要解析的Feed中的元素,因此我们不知道feed是否包含feedzirra可以理解的元素。

将这些Feed存储在数据库中的最佳方法是什么,而不是错过一点信息? (按原样将整个Feed转储到数据库中将无法正常工作,因为我们要查询大多数属性)。什么解析器最适合?选择Feedzirra是为了提高性能,但是,将Feed中的所有数据都放入数据库是一个优先事项。

更新

我正在使用MySQL作为数据库。

2 个答案:

答案 0 :(得分:1)

我还在Feed和条目上建立了数据库模型,并交叉映射了RSS,RDF和Atom的字段,因此我可以捕获所需的数据字段作为起点。然后我添加了一些用于标记的内容和我自己的内部摘要,以及一些内务和维护字段。

如果您从Feedzirra迁移,我建议您暂时将实际Feed XML存储在临时表中,以便您可以在闲暇时使用Nokogiri对其进行后期处理。这样,您的HTTP进程就不会陷入处理文本的困境,它只是检索内容并将其归档,并更新记录处理时间,以便您知道何时再次检查。后期处理可以从存储的XML中提取所需的订阅源信息以存储在数据库中,然后删除该记录。这意味着有一个流程会尽可能快地定期提取Feed,而另一个流程基本上会在后台运行。

此外,Typhoeus/HydraHTTPClient都可以很好地处理多个HTTP请求并且易于设置。

答案 1 :(得分:0)

将XML存储为CLOB,大多数数据库都具有XML处理扩展,允许您将XPath类型查询作为SELECT语句的一部分包含在内。

否则,如果您的DBMS不支持XML查询,请使用您的语言XPath实现来查询CLOB。您可能需要将某些元素提取到表列中以便快速查询。