SpaceNight CC music download script

Document version: 0.1; created 2014-02-12; last modified 2014-02-29.

Stand back -- I know regular expressions! (xkcd 208)

Ich mag SpaceNight. Früher, als ich noch einen Fernseher hatte, lief das immer in der Nachtschleife vom BR und BR alpha. Schön chillige Musik, bei der man gut programmieren kann.

Inzwischen musste das originale Format aufgegeben werden, weil dem Sender die Lizenzgebühren für die Musik zu hoch wurden. Aber die Macher haben sich was neues überlegt und gesagt "Ladet uns eure Creative-Commons-lizenzierte Musik hoch -- wenn wir die verwenden, kriegt ihr 50€". Und haben die Liste der zuletzt hochgeladenen Titel in einer kleinen Box auf der SpaceNight-Webseite veröffentlicht.

Fein, dann kann ich die automatisiert herunterladen! Also hab ich mir ein bash-Script geschrieben...

Script auf gist.github.com

#!/bin/bash
 
# spacenight.sh
# Parses the "Space Night Up To Date" box on http://www.br.de/fernsehen/bayerisches-fernsehen/sendungen/spacenight/index.html
# and downloads all linked media files into a directory. Won't re-download existing files, so you could set up a daily cron job 
# or something like that.
 
if [ -n "$1" ]
then
        targetdir="$1"
else
        targetdir="."
fi
if [ ! -d "$targetdir" ]
then
        echo "The directory "$targetdir" does not exist!"
        exit 1
fi
 
echo "Downloading media files to $targetdir"
wget -O - "http://embed.scribblelive.com/Embed/v5.aspx?Id=225424&ThemeId=4497" 2>/dev/null \
| grep ThreadLiveBlog.Load \
| sed 's/^[^{]*//' \
| sed 's/[^}]*$//' \
| sed 's/{[^{]*"Caption":"\([^"]*\)"[^{}]*"Content":"\([^"]*\)"[^}]*},\{0,1\}/\1|\2§/g' \
| sed 's/{.*\[\(.*\)\].*/\1/' \
| sed 's/{[^}]*},\{0,1\}//g' \
| sed 's/§/\n/g' \
| while read line
do 
        name=$(echo $line | cut -d '|' -f 1 | sed -e "s/[^\]\[A-Za-z0-9~., _{}\(\)\'\-\+]//g" | sed 's/^ *//' | sed 's/ *$//')
        url=$(echo $line | cut -d '|' -f 2)
        if [ "$name" -a "$url" ]
        then
                mediaurl=$(wget -O - "$url" 2>/dev/null | sed 's/.*media:content url="\([^"]*\)".*/\1\n/g')
                if [ ! -e "$targetdir/$name.mp3" ]
                then
                        echo "Downloading $name.mp3 from \"<$mediaurl>\""
                        wget -O "$targetdir/$name.mp3" "$mediaurl"
                else
                        echo "The file \"$targetdir/$name.mp3\" already exists, won't re-download."
                fi
        fi
done