2009-01-14 8 views
9

Ich möchte RSS-Feeds analysieren und auf meinem ReadyNas, die sowieso rund um die Uhr läuft, herunterladen.Wie rss-feeds/xml in einem Shell-Skript zu analysieren

Also denke ich über ein Shell-Skript überprüfen regelmäßig die Feeds und launch wget, um die Dateien herunterzuladen.

Was ist der beste Weg, um das Parsing zu tun?

Danke!

+0

Vielleicht muss ich hinzufügen: Ich bin auf einer sehr langsamen Linie, deshalb ich meine Workstation nicht laufen. – Oli

Antwort

19

Manchmal genügt ein einfacher Einzeiler mit Shell-Standardbefehlen für das genug sein:

wget -q -O- "http://www.rss-specifications.com/rss-podcast.xml" | grep -o '<enclosure url="[^"]*' | grep -o '[^"]*$' | xargs wget -c 

sicher, dass dies nicht in jedem Fall nicht funktioniert, aber es ist oft gut genug.

+1

Brilliant. Ein Warnhinweis (wget_1.13.4-3 mit polipo_1.0.4.1-1.2): Die Option "-c" (um unterbrochene Downloads fortzusetzen) funktioniert möglicherweise nicht, wenn Sie auch einen Proxy-Server verwenden. Es scheint immer wieder Dateien zu versuchen, die bereits abgeschlossen sind. – sourcejedi

+1

Sehr elegant. Gute Arbeit. – Clarkey

+0

das funktioniert, nur eine kleine Sache, gibt es eine Möglichkeit, nur die neuesten im RSS-Feed herunterladen ?, so können Sie es über Cron ausführen, ich möchte nicht 400 Episoden einer Show herunterladen:/ – wiak

2

Haben Sie Zugriff auf awk? Vielleicht könnten Sie XMLGawk

0

verwenden. Sie können xsltproc von libxml2 verwenden und ein einfaches XSL-Stylesheet schreiben, das die RSS analysiert und eine Liste von Links ausgibt.

1

habe ich schrieb die folgende einfache Skript XML von Amazon S3 zum Download bereit, so wäre es für das Parsen von verschiedenen Arten von XML-Dateien nützlich sein:

#!/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%" 

Dies ist ähnlich Ansatz @leo answer.

+0

Geben Sie mindestens @leo ein paar Credits ... – aloisdg

+0

Ich erinnere mich nicht, wenn einer der Teile verwendet wurde, da dies sehr grundlegende Syntax ist, die ich sehr oft außer Kontrolle verwende. Allerdings habe ich die Post nur für den Fall verlinkt. – kenorb