我有一个名为Rss-Aware的软件,我正在尝试使用它。它基本上是桌面反馈检查器,用于检查RSS源是否更新,并通过Ubuntu的Notify-OSD系统发出通知。
但是,要知道要检查哪些Feed,您必须在〜/ .rss-aware / rssfeeds.txt中的文本文件中依次列出每个Feed网址之间的换行符列表中的Feed网址。类似的东西:
http://example.com/feed.xml
http://othersite.org/feed.xml
http://othergreatsite.net/rss.xml
......看起来很简单吧?好吧,我想要使用的Feed列表是从Google Reader导出的OPML文件(它是一种XML),我不知道如何解析它只是输出feed urls。看起来它应该很直接但我很难过。
如果有人能用Python或Ruby提供实现,或者我可以从提示中快速完成某些操作,我会很高兴。 bash脚本会很棒。
非常感谢你的帮助,我是一个非常弱的程序员,并且很想学习如何进行这种基本的解析。
编辑:此外,here is the OPML file我正在尝试从中提取Feed网址。
答案 0 :(得分:4)
我为此目的编写了一个订阅列表解析器。它被称为listparser,它是用Python编写的。我刚测试了你的OPML文件,它似乎完美地解析了文件。它还可以提供您的Feed标签。
如果您曾经使用过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']
可以使用类似于:
的脚本创建包含供稿网址的文件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
替换为您的实际用户名即可。完成!
答案 1 :(得分:2)
由于它是一个XML文件,您可以使用XPath查询来提取网址。
在XML文件中,rss订阅源网址似乎存储在xmlUrl
属性中。 XPath表达式//@xmlUrl
将选择该属性的所有值。
如果您想在网络浏览器中对此进行测试,可以使用online XPath tester。如果要在Python中执行此XPath查询,请this question explains how to use XPath in Python。此外,lxml文档的a page on using XPath in lxml可能会有所帮助。
答案 2 :(得分:2)
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')
答案 3 :(得分:0)
你也可以使用正则表达式。我使用以下搜索和替换正则表达式将我的Google Reader OPML导出转换为Firefox HTML实时书签导入:
^\s+<outline.*?title="(.*?)".*?xmlUrl="(.*?)".*?htmlUrl="(.*?)".*?/>
<DT><A FEEDURL="$2" HREF="$3">$1</A>