Shell Skript: Podcast Feed.xml bei neuen Einträgen automatisch aktualisieren

Geschrieben von Eric Scheibler am 23.11.2010

Immer wieder stoße ich auf interessante Episoden aus einem Podcast, Nachrichtenbeiträge oder sonstige MP3 Dateien. Meist habe ich aber in dem Moment keine Zeit oder Lust, sie mir anzuhören. Also suchte ich nach einer Möglichkeit, um diese Beiträge sammeln und später komfortabel hören zu können. Am sinnvollsten erschien es mir, die MP3’s alle in einen Ordner herunterzuladen und aus allen dann automatisch einen Podcast Feed zu erzeugen. Ein Audiopodcast lässt sich besonders mit dem iPhone sehr komfortabel hören. Man kann u.A. die Abspielgeschwindigkeit verändern und die App merkt sich die jeweilige Abspielstelle.

Ziel Wenn eine neue Datei in den Podcast Ordner kopiert wird, soll das zugehörige <Item> Tag in der Feed.xml automatisch erstellt werden, sodass man sich darum nicht mehr kümmern muss.

Voraussetzungen Das Einrichten des Webservers inkl. Podcast Feed habe ich hier bereits beschrieben. Im Folgenden gehe ich von einer Ordnerstruktur wie unter “4. podcast feed einrichten” erklärt, aus. Das heißt, neue MP3’s speichere ich in den Ordner /archiv/podcasts.

Außerdem muss ggf. noch MP3Val zur Reparatur defekter MP3’s installiert werden:

# apt-get install mp3val

Shell Skript erstellen

Zunächst das Skript herunterladen und an geeigneter Stelle abspeichern. Ich verwende den “bin/” Ordner im Homeverzeichnis des aktuellen Benutzers. Anschließend ausführbar machen:

chmod +x ~/bin/addMP3toPodcast.sh

Damit sich der Feed nun auch automatisch aktualisieren kann, legt man noch einen Cronjob an:

crontab -e
*/30 * * * * $HOME/bin/addMP3toPodcast.sh

Das Skript wird also alle 30 Minuten ausgeführt und erstellt jedes Mal den gesamten Feed neu. Das macht aber nichts und war die einfachste Lösung für das Aktualisierungsproblem.

Wenn man jetzt eine MP3 Datei abspeichern will, muss man darauf achten, dass sie keine Leerzeichen enthält. Leerzeichen und auch Umlaute im Dateinamen sind nicht erlaubt und machen den RSS Feed invalide. Um trotzdem einen aussagekräftigen Dateinamen zu erhalten, benutze ich den “.” als Trennzeichen. Also z.B. “CRE161.-.Der.CCC.und.die.Oeffentlichkeit.mp3”.

Aus dem Dateinamen wird mit der Zeile

<title>${filewithoutExtension//./ }</title>

das Title - Atribut für das jeweilige Item gebildet, indem die Punkte durch Leerzeichen ersetzt werden (im Title - Atribut ist das ja wieder erlaubt, versteht sich). “//” bedeutet, dass nicht nur der erste sondern alle Punkte im jeweiligen String ersetzt werden.

Wenn jemand also eine andere Dateinamenstruktur anstrebt, muss er auch diese Zeile abändern.

Beispielsweise mit dem Validator vom W3C kann man überprüfen, ob der erstellte Feed auch valide ist.