我正在尝试使用一款名为Rss-Aware的软件。它基本上是一个桌面提要检查器,可以检查RSS提要是否更新,并通过Ubuntu的Notify-OSD系统发出通知。
但是,为了知道要检查哪些提要,您必须在~/.rss-aware/ between s.txt中的文本文件中逐个列出提要url,每个提要url之间有换行。类似于:
http://example.com/feed.xml
http://othersite.org/feed.xml
http://othergreatsite.net/rss.xml...Seems很简单,对吧?嗯,我想使用的提要列表是从Google Reader导出为OPML文件(它是一种XML)的,我不知道如何解析它来输出提要urls。它看起来应该是非常直截了当的,但我被难住了。
如果有人能用Python或Ruby或其他我能在提示符下快速完成的实现,我会很高兴的。如果有bash脚本就太棒了。
非常感谢你的帮助,我是一个很弱的程序员,我很想学习如何做这个基本的解析。
编辑:还有,我试图从中提取提要urls的here is the OPML file。
发布于 2011-10-16 14:35:25
为此,我编写了一个订阅列表解析器。它叫做listparser,它是用Python语言编写的。我刚刚测试了您的OPML文件,它似乎可以很好地解析该文件。它还将使您的提要的标签可用。
如果你曾经使用过feedparser,那么你应该对它的接口很熟悉:
>>> import listparser as lp
>>> d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml')
>>> len(d.feeds)
112
>>> d.feeds[100].url
u'http://longreads.com/rss'
>>> d.feeds[100].tags
[u'reading']可以使用类似于以下内容的脚本创建包含提要URL的文件:
import listparser as lp
d = lp.parse('https://dl.dropbox.com/u/670189/google-reader-subscriptions.xml')
f = open('/home/USERNAME/.rss-aware/rssfeeds.txt', 'w')
for i in d.feeds:
f.write(i.url + '\n')
f.close()只需用您的实际用户名替换USERNAME即可。完成了!
发布于 2015-10-31 20:09:42
XML解析非常容易实现,对我来说效果很好。
from xml.etree import ElementTree
def extract_rss_urls_from_opml(filename):
urls = []
with open(filename, 'rt') as f:
tree = ElementTree.parse(f)
for node in tree.findall('.//outline'):
url = node.attrib.get('xmlUrl')
if url:
urls.append(url)
return urls
urls = extract_rss_urls_from_opml('your_file')发布于 2011-04-23 12:26:41
因为它是一个XML文件,所以可以使用XPath查询来提取urls。在XML文件中,看起来rss feed urls存储在xmlUrl属性中。XPath expression //@xmlUrl将选择该属性的所有值。
如果你想在你的网络浏览器中测试一下,你可以使用online XPath tester。如果想要在Python语言中执行这个XPath查询,可以使用this question explains how to use XPath in Python。此外,lxml文档中的a page on using XPath in lxml可能会有所帮助。
https://stackoverflow.com/questions/5761771
复制相似问题