blog · git · desktop · images · contact & privacy · gopher


Brücke von newsbeuter zu mpd

newsbeuter ist ein tolles Programm, doch es hat (imo) einen kleinen Haken: Es gibt keine Möglichkeit, direkt aus newsbeuter heraus Podcasts herunterzuladen. Zumindest kenne ich keine. Stattdessen wirft er nur die Links zu den Podcasts in eine Queue, damit man sie mit dem "podbeuter" laden kann. podbeuter ist bei newsbeuter dabei, aber ein extra Programm mit separater ncurses-Oberfläche und Gedöns. Etwas sperrig. Eigentlich will ich nur im newsbeuter auf einen Knopf drücken und dann den Podcast demnächst auf der Platte haben, um ihn normal mit mpd hören zu können.

Bisher habe ich daher ganz stumpf Podcasts einfach so heruntergeladen. Von Hand. Eben riss der Geduldsfaden.

Idee: Die newsbeuter-Queue per Skript auslesen und die Dateien ohne podbeuter ziehen. Dazu könnte man regelmäßig via Cronjob bei der Datei vorbeischauen, alle Links rausholen und sie dann leeren. Ja, das ist nicht ganz sauber -- was passiert, wenn zeitgleich etwas in diese Datei geschrieben wird, ist ungewiss. Allerdings wird nur in die Queue geschrieben, wenn ich auf einen Knopf drücke. Das Risiko gehe ich ein.

Die Einträge in der Queue-Datei sehen leider so aus:

http://alternativlos.cdn.as250.net/alternativlos-10.ogg "/home/void/alternativlos-10.ogg"

Man muss also ein Stück abschneiden, denn davon interessiert nur der erste Teil. Und wenn man schon dabei ist, kann man die neuen Dateien ja auch gleich in die mpd-Playlist einfügen. Im Moment sieht die vorläufige Lösung so aus:

#!/bin/bash

queue=~/.newsbeuter/queue
poddir=~/podcasts
mpdbase=zzzPodcasts
tmpqueue=/tmp/newsbeuter.queue

# Prepare list of URLs, truncate old queue.
cp "$queue" "$tmpqueue"
> "$queue"
sed -ri 's/(.*) .*/\1/' "$tmpqueue"

# Download all files into a temporary directory.
tmpdir=$(mktemp -d --tmpdir="$poddir")
trap 'rmdir "$tmpdir"' 0
wget -q -P "$tmpdir" -i "$tmpqueue"

# Collect new file names and add them to the mpd playlist.
shopt -s nullglob
newfiles=("$tmpdir"/*)
if (( "${#newfiles[@]}" > 0 ))
then
    mv "${newfiles[@]}" "$poddir"
    mpc -q --wait update
    for i in "${newfiles[@]}"
    do
        filebase="${i##*/}"
        mpc add "$mpdbase/$filebase"
        echo "Added: $filebase"
    done
fi

Das regelmäßig, so alle 5 Minuten, laufen lassen. Dann kann man bequem die Feeds durchschauen, interessante Podcasts in die Queue werfen und er lädt sie dann dezent im Hintergrund herunter. Die echo-Zeile sorgt auch noch für eine kleine Statusmail, sofern das in einem Cronjob passiert.

Nur noch am Rande: Die Geschichte mit $mpdqueue und zzzPodcasts erklärt sich dadurch, dass mein mpd nur ~/music als Musikverzeichnis sieht und dort ein Link namens zzzPodcasts existiert, der auf ~/podcasts zeigt. Das ist aus Gründen des einfacheren Synchings mit meinem mobilen Player so.

$ ls -ld ~/music ~/podcasts ~/music/zzzPodcasts
drwxr-xr-x 70 void users 4096 Dec 21 16:02 /home/void/music
lrwxrwxrwx  1 void users   12 Dec 21 16:02 /home/void/music/zzzPodcasts -> ../podcasts/
drwxr-xr-x  2 void users 4096 Dec 22 00:25 /home/void/podcasts

Daraus ergibt sich die Notwendigkeit, jedem Dateinamen eines Podcasts noch $mpdbase voranzustellen.