Podcatching: automatisiert MP3-Sendungen herunterladen

Aus LinuxUser 08/2005

Podcatching: automatisiert MP3-Sendungen herunterladen

© sxc.hu

Radio für unterwegs

Viele Web-Radios bieten MP3s zum Download. Wer das mühselige Abgrasen von Web-Sites scheut, dem hilft dabei Podcasting: automatisiert Sound-Files downloaden und mit dem MP3-Walkman oder dem Linux-PC anhören.

Podcasting ist der neueste Trend in der bunten Welt der Weblogs. Dabei verteilen RSS-Feeds Informationen über aktuelle MP3-Dateien, die Sie herunterladen und nach Belieben wieder abspielen können – also kein Grund, beim schönen Wetter an den Rechner gefesselt zu bleiben. Wenn Sie einen solchen Feed abonnieren, erhalten Sie automatisch neue Podcasts, die Sie später unterwegs auf Ihrem Lieblings-MP3-Player abspielen können.

Der Begriff Podcasting rührt natürlich vom Apple iPod her, aber er führt in die Irre: Man benötigt man keinen iPod, um die Dateien abzuspielen. Podcasting bezieht sich dabei auf den Sender (von englisch Broadcasting, übertragen) auf das Sendeprogramm. Der Empfang, um den es in diesem Artikel geht. heißt entsprechend Podcatching.

Medienvielfalt

Obwohl viele Podcasts – ebenso wie viele Blogs – recht banal sind, gibt es durchaus auch hochwertige Beiträge. Doug Kate von IT Conversations [1] bietet beispielsweise über 300 Aufnahmen von Interviews und Keynote-Präsentationen aus dem Computer-Bereich. Zu den Highlights zählen Paul Grahams Vortrag über große Hacker, Bruce Schneier über Sicherheit und Lawrence Lessig, der aus seinem Buch “Free Culture” vorliest. Ein Verzeichnis interessanter deutschsprachiger Podcasts führt [2].

Der ganze Hype um Podcasts geht größtenteils auf den ehemaligen MTV-VJ Adam Curry zurück. Nach einer Diskussion mit ihm entschloss sich Dave Winer 2001, das multimediale Übertragungsmodell im Internet zu erweitern, indem er den RSS-Feeds das Subelement enclosure hinzufügte [3] (siehe Kasten “Pod-Feeds”)

Ein Podcatching-Client liest die vom User abonnierten RSS-2.0-Feeds, lädt die gewünschten Audiodateien herunter und verschiebt sie in die Musikbibliothek oder auf den tragbaren MP3-Player. Wer einen iPod sein besitzt und iTunes auf einem Mac einsetzt, hat es am einfachsten. Linux-User mit unterschiedlichen MP3-Spielern müssen etwas mehr Arbeit investieren, wenn sie den automatischen Transfer sauber einrichten wollen.

Pod-Feeds

Das folgende Beispiel eines RSS-Feed-Abschnitts zeigt ein enclosure-Tag mit den drei wichtigen Attributen: die URL der zu herunterladenden Datei, die Größe in Bytes (length) und den Dateityp.

<enclosure ?
url="http://downloads.bbc.co.uk?
/rmhttp/radio4/history/?
inourtime/?
inourtime19_pod.mp3"?
 length="12582787" ?
 type="audio/mpeg"/>

Dave Winers ursprüngliche Spezifikation definierte maximal einen Anhang je Eintrag, aber wie bei vielen Aspekten von RSS diskutiert die Community darüber noch heftig.

Auf Empfang schalten

Manche Player wie der iPod benötigen spezielle Treiber-Software zur Synchronisierung, siehe [4]. Dieser Artikel geht davon aus, dass Sie einen normalen MP3-Player verwenden, der sich als externes Laufwerk mounten lässt.

Bei iPodder [5] handelt es sich um eine GUI-basierte Python-Anwendung, mit der Sie Podcasts abonnieren und empfangen können. Zurzeit liegt für Linux Version 2.0-rc3 vor. Es gibt noch ein paar kleine Bugs, die hoffentlich vor dem Final-Release ausgemerzt werden. iPodder setzt Python 2.3 oder neuer voraus (unterstützt allerdings nicht Python 2.5). Außerdem erfordert es folgende Pakete: python-gtk, wxPythonGTK, libwxPythonGTK2.5_2, pythonlib, libpython2.3, libxml2-python und xmms-python (Support für den XMMS-Player).

Zum Installieren entpacken Sie zunächst das Archiv; dann wechseln Sie in den neuen Ordner und führen als Root den Installer aus:

tar -xvjf iPodder-?
linux-2.0-RC2.tar.bz2
cd iPodder-linux/
sudo run ./install.sh

Der Installer kopiert das Paket nach /opt/iPodder/ und legt einen symbolischen Link auf /usr/bin/iPodder an. Wenn Sie ein Symbol für den Desktop erstellen wollen, finden Sie unter /opt/iPodder eine passende Icon-Datei namens iPodder.png. Verlinken Sie diese Datei mit /usr/bin/iPodder und klicken Sie auf das Symbol, um das Programm zu starten. Aternativ geben Sie in einem Terminalfenster iPodder& ein.

Abbildung 1: Das iPodder-Register "Subscriptions" zeigt die abonnierten Feeds.

Abbildung 1: Das iPodder-Register “Subscriptions” zeigt die abonnierten Feeds.

Standardmäßig öffnet IPodder das Register Subscriptions (Abonnements) (Abbildung 1). Es gibt einen Überblick über die Feeds, die Sie abonniert haben. Klicken Sie auf einen Feed, sehen Sie unten im Fenster Episode eine Liste der Podcasts, die Sie aus diesem Channel abrufen können. Standardmäßig wird nur der letzte Podcast im jeweiligen Feed für die Übertragung gekennzeichnet, aber Sie können jeden anderen – oder sogar alle – markieren, sollten Sie eine frühere Sendung verpasst haben.

Abbildung 2: Das Register "Podcast Directory" bietet eine Auswahl der Abonnementsoptionen und ermöglicht außerdem die manuelle Adresseingabe.

Abbildung 2: Das Register “Podcast Directory” bietet eine Auswahl der Abonnementsoptionen und ermöglicht außerdem die manuelle Adresseingabe.

Wenn Sie auf das Register Podcast klicken (Abbildung 2) sehen Sie eine Auswahl der Podcasts, die Sie abonnieren können. Außerdem können Sie Adressen von Feeds manuell eingeben. Mit einem einfachen Klick öffnen Sie einen Ordner in der Liste und mit Doppelklick auf einem Feed nehmen Sie den Feed in Ihre Abo-Liste auf. Sind Sie damit fertig, kehren Sie zum Register Subscriptions zurück und klicken auf den grünen Button mit dem Doppelpfeil, um die Downloads auszulösen. Den Fortschritt der Downloads überwachen Sie im Register Download (Abbildung 3).

Abbildung 3: Überwachen und verwalten von Downloads im Register "Downloads".

Abbildung 3: Überwachen und verwalten von Downloads im Register “Downloads”.

Mit der Zeitplanungsoption unter Tools/Scheduler steuern Sie Ihre Downloads zeitlich. Sie haben die Möglichkeit, in regelmäßigen Intervallen oder zu einem festen Zeitpunkt nach neuen Feeds zu suchen. Wenn Sie iPodder schließen, reduziert sich die Anwendung auf Symbolgröße. Sie bleibt jedoch im Hintergrund aktiv, sodass Sie sich mit anderen Aufgaben befassen können.

iPodder erstellt den Ordner ~/iPodderData/downloads, in dem es die MP3-Dateien speichert. Wegen eines kleinen Bugs war diese Einstellung nicht über die GUI editierbar, allerdings ließ sie sich über die Konfigurationsdatei ~/iPodderData/ipodder.cfg manuell ändern. Wenn Sie die Schritte in diesem Artikel nachvollziehen wollen, müssen Sie einen Ordner mit dem Namen ~/podin anlegen und ihn als Download-Verzeichnis einstellen.

iPodder ist eine sehr elegante und gut durchdachte Anwendung, die über eine intuitives Interface verfügt. Was die Wiedergabe betrifft, unterstützt iPodder zurzeit nur iTunes und den Windows Media Player, aber es gibt eine sehr nützliche Option unter File | Preferences | Advanced (Datei : Einstellungen : Erweitert), um nach erfolgreichem Download automatisch ein Skript auszuführen – dazu gleich noch mehr. Das Programm hat ein paar Lücken, zum Beispiel gibt es keine Funktion, die den freien Speicherplatz auf der Festplatte überprüft; die Entwickler werden aber dieses sowie andere kleine Probleme wohl demnächst in Angriff nehmen.

Eine Alternative als GUI-Applikation stellt jPodder dar [6], ein Cross-Plattform-Client, der in Java geschrieben ist. Momentan weist die Betaversion für Linux Version 0.9 noch ein paar Macken, aber der Client wird mit Azureus [7] gebundelt und leistet gute Dienste für Podcasts, die über Bittorrent übertragen werden.

Alternative für die Linux-Befehlszeile

BashPodder [8] von Linc Fessenden umfasst nur 44 Zeilen Bash-Code und benötigt lediglich bash, wget und sed, die allesamt zur Standardausrüstung der meisten Linux-Distributionen gehören.

Der Autor beschreibt seine Motivation so: “BashPodder wurde geschrieben, um klein und schnell zu sein und was noch wichtiger ist, um die KISS-Regel (Keep It Simple Stupid) einzuhalten. So darf jeder nach eigenem Bedarf das Skript ergänzen oder auch etwas aus dem Skript streichen (von meiner Seite her herzlich gerne).”

Wenn Sie BashPodder einsetzen wollen, downloaden Sie das Hauptprogramm bashpodder.shell sowie das Konfigurationsbeispiel bp.conf und legen Sie beide Dateien im Ordner ab, in dem Sie Ihre Podcasts speichern wollen. Sonst gibt es nichts zu entpacken oder zu installieren, Sie müssen lediglich chmod +x bashpodder.shell eingeben, um das Skript ausführbar zu machen. Bei bp.conf handelt es sich um eine einfache Textdatei, die je eine URL pro Feed auflistet. Sie können bp.conf mit einem Texteditor bearbeiten und Zeilen hinzufügen oder löschen.

Standardmäßig speichert BashPodder die Podcasts in einem Verzeichnis unterhalb des Ordners, in dem Sie das Tool ausführen. Dabei benennt es das Unterverzeichnis nach dem aktuellen Zeitstempel. Im Beispiel soll der Download-Ordner wieder ~/podin heißen. Um den Namen zu ändern, laden Sie das Skript mit Ihrem bevorzugten Editor, suchen Sie die Stelle mit der datadir-Definition und ändern die Definition von datadir=$(date +%Y-%m-%d) in datadir=/Pfad/zu/podin

Um das Skript automatisch auszuführen, setzen am besten Cron ein, den System-Daemon für regelmäßige Arbeiten. Standardmäßig bearbeitet man die entsprechende Datei crontab mit dem Editor Vi. Um dafür ein anderes Programm zu verwenden, exportieren Sie seinen Namen als Umgebungsvariable EDITOR. Weil zum Beispiel joe bevorzugt, gibt folgendes:

export EDITOR=joe
crontab -e

Um bashpodder.shell so einzustellen, dass es jeden Tag um 9.00 ausgeführt wird, tragen Sie eine Zeile wie diese ein:

0 9 * * * ?
/Pfad/zu/bashpodder.shell

Die Homepage von BashPodder bietet außerdem viele Änderungen und Ergänzungen für das Skript, die von Usern stammen, wie BPConf von Leon Penningtons, ein einfaches Front-End für die KDE-Konfiguration [9]

Bereit zum Synchronisieren

Was passiert, wenn Sie Ihren Player anschließen, hängt stark von Ihrer Distribution ab. So benutzt Suse 9.2 zum Beispiel subfs/submount und mountet den Player automatisch unter einem Namen, der sich von der Seriennummer des Geräts ableitet. Als weitere Besonderheit der Suse-Distribution verwendet sie das Verzeichnis /media/, während andere Distributionen /mnt/ verwenden. Verbindet man beispielsweise einen PowerMusic-MP3-Player mit einer Suse-Maschine, legt sie automatisch einen Mountpoint mit dem wenig intuitiven Namen /media/usb-035211010152:0:0:0p1 an. Um eine allgemeine Lösung zu bieten, soll der Mountpoint für den verwendeten MP3-Player im weiteren Artikel einfach /pfad/zu/mp3player heißen. Legen Sie am besten einen symbolischen Link an, den Sie sich leicht merken können:

ln -s /media/usb-?
035211010152:0:0:0p1 ?
/pfad/zu/mp3player

Der neue Ordner namens ~/podin nimmt bereits die neuen Podcasts auf. Jetzt fehlt noch ein weiteren Ordner namens ~/podmirror, der eine Kopie der Dateien auf dem MP3-Player enthalten soll. Um zu vermeiden, dass die Podcasts anderen Musikstücken auf dem MP3-Player in die Quere kommen, können Sie dort einen Ordner anlegen, der zum Beispiel /pfad/zu/mp3player/podcasts/ heißt.

Tücken der Synchronisierung

Ein Gerät mit einem Ordner zu synchronisieren, ist nicht so einfach wie man vielleicht meint – vor allem dann nicht, wenn man Dateien sowohl auf dem MP3-Player als auch auf dem Computer löschen kann. Im folgenden gehen wir davon aus, dass der Podcast-Ordner des Players zu Beginn leer ist und dass es keine andere Möglichkeit gibt, eine MP3-Datei auf das Device zu übertragen als über die Synchronisierung mit dem Computer.

Der Prozess besteht aus drei Schritten. Der erste synchronisiert den Podcast-Ordner /pfad/zu/mp3player/podcasts/ auf dem MP3-Player mit dem Ordner ~/podmirror auf dem Computer. Dabei werden alle Dateien in ~/podmirror gelöscht, die sich nicht auf dem Player befinden, in der Annahme, dass die Dateien als unerwünscht vom Player entfernt wurden. Wenn andererseits eine Datei auf dem Player existiert, in ~/podmirror aber nicht, ignoriert das Programm die Datei und legt keine neue Kopie ~/podmirror an.

Schritt zwei umfasst die einfache Übertragung der neuen MP3s von ~/podin nach ~/podmirror. Dieser Transfer kann erst dann stattfinden, wenn die Synchronisierung abgeschlossen ist, anderenfalls würden auch neue Dateien gelöscht, weil sie sich nicht auf dem MP3-Player befinden.

Im dritten Schritt synchronisiert man ~/podmirror mit /pfad/zu/mp3player/podcasts/. Dabei löscht die Software alle Dateien in /pfad/zu/mp3player/podcasts/, die sich nicht in ~/podmirror befinden. Dann erstellt sie auf dem MP3-Player eine neue Kopie von jeder Datei in ~/podmirror, die sich noch nicht auf dem Gerät befindet: Das sind die neuen Dateien, die Sie von ~/podin übertragen haben.

Stellen Sie sicher, dass Sie diese Prozesse verstehen und – und um ganz sicher zu gehen – sichern Sie die Daten auf dem Player, bevor Sie die erste Synchronisierung versuchen. Ein Fehler könnte, nachdem Sie versehentlich alle Dateien vom Player gelöscht haben, den Inhalt von ~/podmirror komplett löschen.

Um den Player zu synchronisieren, benutzen Sie am besten das Befehlszeilentool rsync. Bei den meisten Distributionen sollte eine Version an Bord sein; alternativ laden Sie den Quellcode von [10] herunter und kompilieren das Tool selbst.

Wie bereits beschrieben, werden im ersten Schritt alle Dateien aus podmirror/ gelöscht, die Sie bereits vom Player entfernt haben:

rsync -r --progress --delete ?
--existing --size-only ?
/pfad/zu/mp3player/podcasts/ ?
/pfad/zu/podmirror/

Die meisten Geräte auf Flash-Basis nutzen das FAT32-Dateisystem, das keine Unix-Zeitstempel kennt. Die Option --size-only gibt Ihnen die Möglichkeit, die Aktualisierung von Dateien zu überspringen, die zwar identisch sind, aber deren Zeitstempel sich scheinbar geändert haben. Die Option -existing hält rsync davon ab, Dateien neu zu installieren, die sich nicht mehr in ~/podmirror befinden. Die Option -progress dokumentiert den Fortschritt der Synchronisation. Der zweite Schritt, der die neuen Podcasts aus ~/podin nach ~/podmirror kopiert, gestaltet sich einfach:

mv /pfad/zu/podin/* ?
/pfad/zu/podmirror/

In Schritt drei kommt wieder rsync zum Einsatz, aber in umgekehrter Richtung und ohne die Option --existing, weil neue Dateien auf den Player wandern sollen:

rsync -r --progress ?
--delete --size-only ?
/pfad/zu/podmirror/ ?
/pfad/zu/mp3player/podcasts

Denken Sie daran, den Player zu unmounten, bevor Sie ihn abklemmen. Geben Sie dazu eject /pfad/zu/mp3player ein. Dann könnnen Sie das Gerät einpacken und unterwegs Podcasts hören.

Alles zusammen

Das das fertige Skript speichern Sie nun unter syncplayer (Listing 1). Das Skript gibt eine Fehlermeldung aus, wenn der MP3-Player nicht gemountet ist oder der Zielordner nicht existiert. Passen Sie /pfad/zu/ in Zeilen 3 bis 5 Ihrem eigenen Setup an.

Listing 1

syncplayer

#!/bin/bash
# syncplayer
# Pfad zu den Ordnern. Passen Sie den Pfad Ihrem persönlichen Setup entsprechend an.
mp3player=/pfad/zu/mp3player # der Mountpoint für Ihren Player
podin=/pfad/zu/podin
podmirror=/pfad/zu/podmirror
# Testplayer ist gemountet und der Ordner podcasts existiert
[ ! -d $mp3player/ ] && echo "mp3 player not mounted" && exit 1
[ ! -d $mp3player/podcasts ] && echo "Device folder podcasts not present" && exit 1
# Synchronisierung durchführen
rsync -r --progress --delete --existing --size-only $mp3player/podcasts/ $podmirror/
mv $podin/* $podmirror/
rsync -r --progress --delete --size-only $podmirror/ $mp3player/podcasts

Um dieses Skript automatisch auszuführen, wenn neue Podcasts eintreffen, stellen Sie iPodder so ein, dass es das Skript aufruft. Dazu geben Sie syncplayer unter File | Preferences | Advanced als Option für die Ausführung von Skripts beim Download an. Wenn Sie BashPodder verwenden, müssen Sie eine Zeile am Ende von bashpodder.shell einfügen. Dazu editieren Sie die Datei oder tippen einfach echo "/pfad/zu/syncplayer" >> bashpodder.shell (achten Sie dabei darauf, dass Sie >> und nicht > tippen, um die Datei zu ergänzen, statt sie zu überschreiben).

Um die Synchronisation automatisch beim Anschließen eines MP3-Geräts zu starten, hängen sie das Skript in das Hotplug-Subsystem ein. Tipps dazu finden Sie im Kasten “Automatisieren”. Sollten die eigenartigen Dateinamen gewisser Podcasts Ihnen Schwierigkeiten machen, finden im Kasten “Kurze Dateinamen” einen Ausweg.

Automatisieren

Wenn Sie das Synchronisationsskript automatisch ausführen lassen wollen, sobald Sie Ihren Player anschließen, können Sie den Vorgang über Hotplug auslösen. Suchen Sie die Hersteller(Vendor)- und Produkt-IDs für das Gerät, indem Sie es anschließen und die Ausgabe von cat /proc/bus/usb/devices nach den relevanten Details für den MP3-Player durchsuchen. Für ein PowerMusic-Gerät beispielsweise ist der folgende Abschnitt von Interesse:

P:  Vendor=0d7d ProdID=0153 ?
Rev= 1.00
S:  Product=PowerMusic

Jetzt legen Sie /etc/hotplug/usb/powermusic.usermap an, um ein Skript auszuführen, das on_plug_powermusic heißen soll. Das Skript wird ausgeführt, sobald Sie den Player anschließen:

# /etc/hotplug/usb?
/powermusic.usermap
# powermusic mp3 player
on_plug_powermusic ?
0x0003 0x 0d7d 0x 0153 0x0 0x0 ?
0x0 0x0 0x0 0x0 0x0 0x0 0x0

Das erste Feld gibt an, welche Optionen einander zugeordnet werden. Hier bleibt der Wert 0x0003 stehen. Das zweite und dritte Feld enthalten die Hersteller- und Produkt-IDs, die aus /proc/usb/devices stammen. Die anderen Felder sind hier nicht von Interesse und dürfen den Wert 0x0 behalten. Nun fehlt noch die Datei on_plug_powermusic in /etc/hotplug/usb/:

# /etc/hotplug/usb/?
on_plug_powermusic
# on_plug_powermusic
until ?
[ -e /pfad/zu/mp3player ];?
 do sleep 1; done
su user -c /pfad/zu/syncplayer ?
>& /var/log/messages
exit 0

Ändern Sie user in Zeile 3 auf den eigenen Usernamen und tragen Sie die Details für /pfad/zu/ ein. Machen Sie die Datei ausführbar und starten Sie Hotplug neu:

chmod +x ?
on_plug_powermusic ?
&& /etc/init.d/boot.hotplug ?
restart

Wenn Sie den Player jetzt mit dem Computer verbinden, startet das Skript syncplayer und überträgt etwaige neue Podcasts auf Ihren MP3-Player. Denken Sie aber daran, den Player wieder zu unmounten, wenn die Übertragung abgeschlossen ist.

Kurze Dateinamen

Viele MP3-Player haben winzige Displays, die längere Dateinamen nur schlecht darstellen. Vielleicht wollen Sie daher die Dateinamen mithilfe von sed kürzen.

Die Podcasts von IT Conversations besitzen sehr lange Dateinamen. Um diese Namen auf den Namen des wichtigsten Redners zu reduzieren, führen Sie folgendes im Verzeichnis ~/podin aus:

for i in ITC.*; do
        mv $i $(basename $i | sed -e "s/ITC\.[^-]*-\([^-]*\)[\.-].*/\1.mp3/g");
        done

So wird beispielsweise ITC.AC2004-RichardMarks-2004.11.07.mp3 in RichardMarks.mp3 konvertiert.

Infos

[1] IT Conversations: http://www.itconversations.com/

[2] Deutschsprachiger Podcasts: http://www.podster.de

[3] RSS Payloads: http://www.thetwowayweb.com/payloadsforrss

[4] Marcel Hilzinger, MP3-Player im Test, LinuxUser 06/05, S. 29

[5] iPodder: http://ipodder.sourceforge.net/index.php

[6] jPodder: http://jpodder.com/

[7] Azureus: http://azureus.sourceforge.net/

[8] BashPodder: http://linc.homeunix.org:8080/scripts/bashpodder/

[9] BFConf: http://www.leonscape.co.uk/linux/bpconf/

[10] Rsync-Homepage: http://freshmeat.net/projects/rsync/

LinuxUser 08/2005 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben