Podcatcher auf dem Uberspace

Podcasts - insbesondere von öffentlich-rechtlichen Rundfunkanstalten - stehen häufig nur für einen begrenzten Zeitraum zum Download zur Verfügung. Natürlich verpass ich diesen Zeitraum (fast) immer. Deshalb hab ich eine Möglichkeit gesucht um diese Podcasts automatisch herunterzuladen - was liegt näher als diese Downloads auf dem Uberspace zu automatisieren? Dabei bin ich auf die Software Mashpodder gestoßen.

Installation

Zunächst muss man den Mashpodder herunterladen:

$ git clone https://github.com/chessgriffin/mashpodder.git ~/bin/mashpodder

Als nächstes muss man die Konfiguration anpassen, die meisten Einstellungen müssen jedoch nicht verändert werden. Das BASEDIR muss angepasst werden und ich habe noch das PODCASTDIR angepasst, damit die Podcasts nicht im Anwendungsverzeichnis landen. Da der Podcatcher nachher als Cronjob laufen soll, braucht man noch ein Wrapper-Skript, das später vom Cronjob aufgerufen wird und das die Outputs loggt. So ein Skript wird als Beispielskript mitgeliefert und muss nur umbennant und ausführbar gemacht werden. Außerdem muss das BASEDIR noch angepasst werden.

$ sed -i 's/#BASEDIR=\"\$HOME\/mashpodder\"/BASEDIR=\"\$HOME\/bin\/mashpodder\"/' ~/bin/mashpodder/mashpodder.sh
$ sed -i 's/PODCASTDIR=\"\$BASEDIR\/podcasts\"/PODCASTDIR=\"\$HOME\/data\/podcasts\"/' ~/bin/mashpodder/mashpodder.sh
$ mv ~/bin/mashpodder/sample-wrapper-for-cron.sh ~/bin/mashpodder/run.sh
$ chmod +x ~/bin/mashpodder/run.sh
$ sed -i 's/BASEDIR=\"\$HOME\/mashpodder\"/BASEDIR=\"\$HOME\/bin\/mashpodder\"/' ~/bin/mashpodder/run.sh

Als letztes muss der Cronjob eingerichtet werden, wobei das genau genommen nicht als Cronjob gelöst wird, sondern, wie von den Ubernauten vorgeschlagen, mit runwhen. Dazu muss man zunächst sicherstellen, dass die daemontools für diesen Nutzer bereits eingerichtet wurden, dann muss der runwhen-Job eingerichtet werden und eingestellt werden, wann und wie oft der Job ausgeführt werden soll. Der Job soll dabei täglich nachts um drei ausgeführt werden:

$ test -d ~/service || uberspace-setup-svscan
$ runwhen-conf ~/etc/run-mashpodder ~/bin/mashpodder/run.sh
$ sed -i 's/RUNWHEN=\"\"/RUNWHEN=\",H=3\"/' ~/etc/run-mashpodder/run
$ ln -s /home/zwiebel/etc/run-mashpodder ~/service

Podcasts abonnieren

Jetzt müssen nur noch Podcasts abonniert werden. Dazu muss man diese - in der Standardkonfiguration - in die Datei mp.conf eintragen. Jedes Podcast-Abo besteht dabei aus drei Einträgen, dem Podcast-Link, dem Unterverzeichnis des PODCASTDIR, in das dieser Podcast gespeichert werden soll und der Anzahl der Episoden, die heruntergeladen werden sollen. Als Anzahl kann alternativ auch all eingetragen werden um alle verfügbare Podcast-Episoden herunterzuladen.

Als Beispiel hier der Radiotatort-Podcast:

$ echo '## Radio Tatort' >> ~/bin/mashpodder/mp.conf
$ echo 'http://web.ard.de/radiotatort/rss/podcast.xml Radio-Tatort all' >> ~/bin/mashpodder/mp.conf

Hinweis: Die erste Zeile ist natürlich nicht notwendig, sondern dient nur der Übersichtlichkeit der Podcastdatei.

E-Mail-Benachrichtigung bei neuen Episoden

Um beim Download neuer Episoden per Mail benachrichtigt zu werden, muss man das run-Skript etwas erweitern. Dabei wird aus dem täglichen Podcastlog die Zusammenfassung extrahiert und sofern ein Download ausgeführt wurde, wird diese per Mail versendet. Die folgenden Befehle können fast direkt in die Bash kopiert werden, nur die RECIEVER und SENDER Mailadresse müssen angepasst werden:

$ sed -i 's/exit 0//' ~/bin/mashpodder/run.sh
$ echo 'RECIEVER="notifyme@example.com"' >> ~/bin/mashpodder/run.sh
$ echo 'SENDER="notifier@example.com"' >> ~/bin/mashpodder/run.sh
$ cat <<'__EOF__' >> ~/bin/mashpodder/run.sh
downloads=$(sed -n -e '/++SUMMARY++/,$p' dailypodcastlog.txt | head -n -1 | tail -n 1)
if [[ $downloads ]]; then
    mailfile=/tmp/mashpod-$RANDOM
    touch $mailfile
    chmod 600 $mailfile
    echo "To: $RECIEVER" >> $mailfile
    echo "Subject: Neue Podcast-Episode" >> $mailfile
    echo "From: $SENDER" >> $mailfile
    echo "" >> $mailfile
    echo "Folgende Episoden wurden heute heruntergeladen:"  >> $mailfile
    echo "$downloads" >> $mailfile
    sendmail -vt < $mailfile
    rm $mailfile
fi
exit 0
__EOF__

Was man noch besser machen kann

Wie immer ziemlich vieles ;-) Was ich hier konkret noch verbessern möchte:

  • Webinterface zum Hinzufügen von Podcasts - wer mag sich denn schon jedes Mal erinnern, wie diese Syntax funktioniert um auf der Kommandozeile einen Podcast zu abonnieren? Und außerdem wollte ich schon immer mal mit (F)CGI rumspielen ;-)
  • Da es hier einen runwhen-Job und damit also eine Abhängigkeit von den daemontools gibt, mein obligatorischer Wunsch endlich eine Möglichkeit zu finden, dass ich diese Services überwachen kann um bei Problemen benachrichtigt zu werden.

Für weitere Vorschläge und Ideen bin ich immer zu haben, bis die Kommentarfunktion tut leider nur per Mail oder Twitter.

Irgendwann kommt hier noch die Kommentarfunktion.
HowTo Kodi Internes Uberspace Linux FireTV Gnome