Saturday 12 December 2015

"Lindenstraße vor 15 Jahren" videos automatisch herunterladen

Seitdem die Website der Lindenstraße im November 2015 erneuert wurde, ist es schwieriger geworden, die Lindenstraße Folgen als video herunterzuladen. Früher konnte man die URL direkt zu den Videodateien im .flv Format rein aus der Nummer der Folge ermitteln. Nun geht das nicht mehr, und statt dessen muß man mehrere Websseiten und ein Java Skript parsen, um an die URL der Videodatei (nun im .mp4 Format) zu gelangen.

Das folgende Sell Script (POSIX compliant) dient dem automatischen Herunterladen der aktuellen "Lindenstraße vor 15 Jahren" Folge. Wenn Ihr es einmal wöchentlich von einer crontab aufruft, bekommt Ihr immer die letzte auf der Lindenstraße Website aktuelle Folge heruntergeladen.

Dieses Shell Script is für Linux und andere Un*x-like Betriebssysteme.  Für Windoof User: Neuerdings gibt es unter Windows 10 eine Linux Bash Shell.  Das Shell Script läuft womöglich damit auch unter Windows, allerdings wurde dies bislang noch nicht getestet.  Ansonsten kann man das Skript auch unter cygwin laufen lassen.

Die "savepath" variable könnt Ihr nach Bedarf anpassen (insbesondere bei Aufruf aus einer crontab). Ansonsten wird die Folge ins aktuelle Verzeichnis mit dem Prefix "lindenstrasse" gespeichert.  

Die Option -q oder --quiet unterdrückt die Ausgabe (sinnvol für Aufrufe aus einer crontab)

#!/bin/sh

base_url="http://www1.wdr.de"
index=$base_url"/daserste/lindenstrasse/videos/index.html"
savepath="lindenstrasse"

# Set resolution default value (first resolution in url)
resol=1

usage () {
echo "Usage: $0 [-q] [--res=N]" >&2
exit 1;
}

err () {
echo "wget or parse error" >&2
exit 1;
}

while [ "$1" != "" ]; do
    PARAM=`echo $1 | awk -F= '{print $1}'`
    VALUE=`echo $1 | awk -F= '{print $2}'`
    case $PARAM in
-h | --help)
   usage
   ;;
-q | --quiet)
   qarg="-q"
   ;;
--res)
   resol=$VALUE
   case $resol in
      ''|*[!1-3])
echo "ERROR: Resolution must be a number between 1 and 3"
usage
;;
   esac
   ;;
*)
   usage
            ;;
    esac
    shift
done

href_tag=$(wget $qarg -O - $index | grep -A8 -m1 "vor 15 Jahren" | tr -d "\n") || err
url=$base_url$(echo $href_tag | sed 's/.*<a href="\(.*html\).*/\1/') || err

href_tag=$(wget $qarg -O - $url | grep -C0 -m1 "Folge " | tr -d "\n") || err
folge=$(echo $href_tag | sed 's/.*Folge \([0-9]*\).*/\1/') || err

url=$(wget $qarg -O - $url | grep -o 'data-extension.*}}' | grep -o 'http:.*\.js') || err

resol=$(expr ${resol} + 1 )

url=$(wget $qarg -O - $url | grep -o '"dflt":{"videoURL".*}' | grep -o 'http:.*\.mp4' | cut -d',' -f1,1,${resol},6) || err

url=$(echo ${url} | grep -o 'http:.*\.mp4' | tr -d ',' | sed 's/adaptiv/ondemand-ww/' | sed 's#z/##' | sed 's#ww/##') || err

if ! [ "$qarg" == "-q" ]; then
   echo "Downloading Folge $folge"
fi

wget $qarg -O ${savepath}${folge}.mp4 $url || err