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
Bei mir passiert folgendes: Converting rss file: /home/osmc/podcasts/"Down to the Detail".rss warning: failed to load external entity "/home/osmc/podcasts/m3u.xsl" cannot parse /home/osmc/podcasts/m3u.xsl Shorten to last 10 Episodes sed: can't read /media/hdd/Daten/playlists/"Down to the Detail".m3u: No such file or directory Remove temporary *.rss-file
sorry - wer lesen kann ... jetzt klappt alles, danke für das tutorial 👍
ich nochmal. im grunde klappt alles, dafür schon mal danke. wenn ein podcast allerdings ü 2 stunden lang ist (zb. stay forever), dann wird höchstends ne minute abgespielt und der mpd client verliert mehrfach die verbindung und der podcast beginnt immer ieder von vorne bzw wird die playlist fortgesetzt ...
irgendwelche ideen?
gruß