如何在shell脚本中解析rss-feeds/xml

13
我想解析rss提要并在我的ReadyNas上下载播客,因为它已经24/7运行。
所以我考虑编写一个shell脚本定期检查提要,并生成wget来下载文件。
最佳解析方法是什么?
谢谢!

也许我需要补充一下:我的网络非常慢,所以我没有运行我的工作站。 - Oli
5个回答

24
有时候,使用shell标准命令的简单一行代码就足够完成此任务:
 wget -q -O- "http://www.rss-specifications.com/rss-podcast.xml" | grep -o '<enclosure url="[^"]*' | grep -o '[^"]*$' | xargs wget -c

当然这并不适用于所有情况,但通常已经足够好了。


1
太棒了。一个警告(wget_1.13.4-3和polipo_1.0.4.1-1.2):如果您同时使用代理服务器,则“-c”选项(继续中断的下载)可能无法正常工作。它似乎会不断重试已经完成的文件。 - sourcejedi
这个可以工作,只是有一点小问题,有没有办法只下载 RSS 订阅中的最新内容?这样你就可以通过 cron 运行它了,我不想下载一个节目的 400 集 :/ - nwgat
1
我的问题是如何仅下载 RSS 订阅中的最新条目。 - nwgat
好的@wiak,这是另一回事了。使用> wget -q -O-“feeds.twit.tv/sn_video_hd.xml”| grep -o'<enclosure url ="[^"]' | grep -o '[^"]$' | head -n 1 | xargs wget -c - leo
1
@wiak的意思是它会获取到最新的Feed条目,通常是最新的一条。 - leo
显示剩余2条评论

2

您是否可以访问awk?也许您可以使用XMLGawk


1

1

我编写了以下简单的脚本来从Amazon S3下载XML,因此它可用于解析不同类型的XML文件:

#!/bin/bash
#
# Download all files from the Amazon feed
#
# Usage:
#  ./dl_amazon_feed_files.sh http://example.s3.amazonaws.com/
# Note: Don't forget about slash at the end
#

wget -qO- "$1" | grep -o '<Key>[^<]*' | grep -o "[^>]*$" | xargs -I% -L1 wget -c "$1%"

这是类似于@leo回答的方法。

我不记得是否有任何部分被使用,因为这是非常基本的语法,我经常随手使用。然而,我已经链接了该帖子以防万一。 - kenorb

0

您可以使用libxml2中的xsltproc,并编写一个简单的xsl样式表来解析rss并输出链接列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接