Python RSS文件作为当今开发界非常流行的语言之一,目前有许许多多的门户网站和 Web 日志都使用了他们,这个也是可以与 RSS 一起工作的 Python 工具中的少数几个。
但它却提供了一个非常自由的解析器,它能很好的处理 RSS 世界中所有令人混乱的差异。以下摘自 rssparser.py 页面。如您所见,大多数 RSS 供给都很糟糕。无效的字符、未转义的 & 符号(Blogger 供给)、无效的实体(Radio 供给)和未转义以及无效的 HTML(通常为注册中心所提供的)。
或者只是 Python RSS文件元素和 RSS 1.0 元素的一个笼统的混合(可移动类型供给(Movable Type feeds))。还有许多太前沿的供给,就象 Aaron 的 feed。他将一个摘录放入描述元素中而将完整的文本放入 content:encoded 元素中(象 CDATA)。这是一个有效的 RSS 1.0,但没有人回真正使用它(除了 Aaron),几乎没有新闻聚集器支持它。
并且许多解析器还排斥它。其他解析器被 RSS 0.94 中的新元素(guid)所困惑(请参阅 Dave Winer 供给作为一个示例)。还有 Jon Udell 的供给,其中还有他才从创作中挑选出来的 fullitem 元素。XML 和 Web 服务会增加互操作性几乎已成定局,所以这样考虑其实很可笑。无论如何,设计 rssparser.py 目的就是要处理所有这些荒唐的情况。
安装 rssparser.py 也十分简单。请您下载 Python 文件(参阅参考资料),将“rssparser.py.txt”重命名为 “rssparser.py”。并将它复制到您的 PYTHONPATH 中。我同样建议您取得可选的 timeoutsocket 模块,它可以改进 Python 中的套接字操作的超时行为,这样有助于取得 RSS feeds 而不必为了防止错误就停止应用程序线程。
- import rssparser #Parse the data, returns a tuple: (data for channels, data for items)
- channel, items = rssparser.parse("http://www.python.org/channews.rdf") for item in items:
- #Each item is a dictionary mapping properties to values print "RSS Item:", item.get('link', "(none)")
- print "Title:", item.get('title', "(none)") print "Description:", item.get('description', "(none)")
如您所见,这段代码非常简单。RSS.py 和 rssparser.py 不能互相取代在很大程度上是因为前者有更多的功能部件,并且维护着 RSS 供给中更多的语法信息。后者更简单,并且是一个容错能力更强的解析器(RSS.py 解析器只能接受格式良好的 XML)。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。
这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python RSS文件确实使得程序更加清晰和美观。
另外Python在其他部分的设计上也坚持了清晰划一的风格,这使得Python RSS文件称为一门易读性、易维护性好,并且被大量用户所欢迎的、用途广泛的语言。Python直接编写的程序段有时运行效率甚至高于用C编写的程序。
【编辑推荐】