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...
#!/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