Wer seinen Raspberry Pi analog zur Serie "Raspi als NAS und Musikmaschine" aufgesetzt hat, kann diesen leicht um ein Skript erweitern, um Podcasts per MPD-Client abzuspielen.
Das Konzept: die RSS-Feeds der Lieblingspodcasts werden per Skript abgerufen und in einer Playlist auf dem Pi abgelegt. MPD liest diese ein und per Client kann dann eine Podcast-Folge gestartet werden.
Auf Github gibt es ein leicht verständliches Skript, welches Podcasts in Playlisten umwandelt:
https://github.com/buzink/podcast2playlist
Das Skript nutzt "xsltproc". Mit Vorlagen (sog. "Stylesheets") können XML-Dokumente gescannt und die relevanten Informationen herausgefiltert werden.
Zuerst installieren wir das Paket:
$ apt install xsltproc
Wir erzeugen einen neuen Ordner für das Skript und die Podcast-Favoriten:
$ mkdir ~/podcasts
Die Podcasts sind in einer einfachen Textdatei organisiert:
$ nano ~/podcasts/rssfeeds.txt
`"Name des Podcasts";"URL zur XML"`
Beispiel:
GNU-LINUX.CH;https://gnulinux.ch/podcast/gnulinux_newscast_rss.xml
DLF - Computer und Kommunikation;https://www.deutschlandfunk.de/podcast-computer-und-kommunikation-komplette-sendung.416.de.podcast.xml
Das Skript habe ich für den Artikel etwas vereinfacht und in zwei Schritte eingeteilt:
- Herunterladen der XML-Datei vom Podcast-Server für jeden Eintrag in "rssfeeds.txt"
- Konvertieren der XML-Datei mit xsltproc in eine Playlist pro Podcast
Zusätzlich können wir die Anzahl der Episoden pro Playlist begrenzen und die heruntergeladenen XML-Dateien am Ende wieder löschen.
$ nano ~/podcasts/rss2playlist
#!/bin/bash
## CONFIG
#working dir for script and rss-feeds
RSSFOLDER="$HOME/podcasts"
#RSS-Feeds file
RSSFEEDS="rssfeeds.txt"
# xslt stylesheet fuer m3u
XSLTFILE="m3u.xsl"
#output playlist type
PLTYPE="m3u"
#output folder for playlists
PLFOLDER="$HOME/playlists"
## MAIN
#download rss feeds
while read p; do
echo "${p%;*}"
echo "${p##*;}"
wget "${p##*;}" -O $RSSFOLDER/"${p%;*}".rss
done < $RSSFOLDER/$RSSFEEDS
#convert rss feeds to playlist
shopt -s nullglob
for f in $RSSFOLDER/*.rss
do
filename=$(basename "$f")
filename="${filename%.*}"
echo "Converting rss file: $f"
xsltproc -o $PLFOLDER/"$filename".$PLTYPE $RSSFOLDER/$XSLTFILE "$f"
echo "Shorten to last 10 Episodes"
sed '22,$ d' -i $PLFOLDER/"$filename".$PLTYPE
echo "Remove temporary *.rss-file"
rm $RSSFOLDER/"$filename".rss
done
Das Skript noch ausführbar machen:
$ chmod +x ~/podcasts/rss2playlist
Für xsltproc wird noch ein "Stylesheet" benötigt, um die Podcast-Episoden aus den XML-Dateien zu filtern:
$ wget https://raw.githubusercontent.com/buzink/podcast2playlist/master/m3u.xsl -O ~/podcasts/m3u.xsl
MPD müssen wir jetzt nur noch sagen, wo die Playlisten zu finden sind. Das machen wir über:
$ nano /etc/mpd.conf
Wichtig: die Playlist und der Pfad muss vom MPD-User gelesen werden können!
Per Crontab können wir jetzt z.B. täglich das Skript laufen lassen und die aktuellsten Podcast-Folgen in unserem Lieblings-MPD-Client abrufen:
Das Skript ist verständlich und übersichtlich, weshalb es leicht erweitert und an die eigenen Bedürfnisse angepasst werden kann. Zum Beispiel könnte vor dem Konvertieren geprüft werden, ob sich die XML-Datei des Servers seit dem letzten Zugriff geändert hat oder ...
Quellen:
https://github.com/buzink/podcast2playlist
https://gnulinux.ch/serie-raspi-als-nas-und-musikmaschine-teil-3
Hey, danke – das sieht gut aus! Nur die Verwendung von „Folder“ für Verzeichnisse in einem Script tut meiner Seele ein bisschen weh, aber damit muss ich wohl leben, das gesehen zu haben ;) Und kann es ja anpassen :)
Das Skript tut was es soll, danke dafür. Ich möchte jetzt aber die letzten 20 Episoden speichern und bin mit sed so gar nicht vertraut. Mein Ansatz wäre sed '44,$ d' Über einen Tipp wo dies nochmal erklärt wird wäre ich sehr froh.
Fast: $ echo "Shorten to last 10 Episodes" $ sed '42,$ d' -i $PL_FOLDER/"$filename".$PL_TYPE