Hallo,
ich möchte hier mein Skript fernsehserien2episodelist zur Verfügung stellen, mit dem sich die Episoden-Listen für den VDRSeriesTimer von der Fernsehserien.de-Webseite erzeugen und speichern lassen:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SERIES_LIST=/etc/vdr/fernsehserien.conf
EPFILE_PATH="/var/cache/eplists/episodes"
function getEpisodes() {
OFS=$IFS
DATA=$(curl --silent http://www.fernsehserien.de/${1}/episodenguide | sed -e 's/<\(br\)*\(\/tr\)*[ \/]*>/___/g' -e 's/<!--.*-->//g' -e 's/<[^<]*>/ /g' -e 's/___/\n/g' -e 's/ /./g' -e 's/\.\./#/g' -e 's/###*/./g' -e 's/#.*$//' -e 's/\./ /g' -e 's/\n */\n/g' -e 's/ */ /g' | grep -E '^ *[0-9]+ +[0-9]+ +[0-9]+.*$' | sed -e 's/ /;/1' -e 's/ /;/1' -e 's/ /;/1' | awk -F';' '{printf "%i\t%i\t%i\t%s\n", $2, $3, $1, $4}')
COUNT=0
EPISODE=0
IFS=$'\n'
PREVIOUS=1
echo "# SEASONLIST"
for LINE in $DATA; do
CURRENT=$(echo $LINE | sed -e 's/\t.*$//')
if [ ${PREVIOUS} -lt ${CURRENT} ]; then
#echo $PREV_LINE
echo "# ${PREVIOUS} ${EPISODE} ${COUNT}"
PREVIOUS=$CURRENT
EPISODE=0
fi
EPISODE=$(( EPISODE + 1))
COUNT=$(( COUNT + 1 ))
PREV_LINE=${LINE}
done
echo "# ${PREVIOUS} ${EPISODE} ${COUNT}"
echo "# /SEASONLIST"
echo "#"
echo "#SE EP No. Title"
echo "#"
PREVIOUS=1
echo "# ${PREVIOUS}. Season"
for LINE in $DATA; do
CURRENT=$(echo $LINE | sed -e 's/\t.*$//')
if [ ${PREVIOUS} -lt ${CURRENT} ]; then
echo "# ${CURRENT}. Season"
PREVIOUS=$CURRENT
fi
echo ${LINE}
done
#echo "$COUNT line(s) found."
IFS=$OFS
}
if [ -z ${1} ]
then
[ ! -r ${SERIES_LIST} ] && echo "No config file found!" && exit 1;
while read LINE
do
[ -n "$(echo ${LINE} | grep -E '^#.*')" ] && continue
SEARCH_STR=$(echo ${LINE} | sed -e 's/==.*$//')
FILE_NAME=$(echo ${LINE} | sed -e 's/^.*==//').episodes
#echo "${SEARCH_STR} => ${FILE_NAME}"
getEpisodes ${SEARCH_STR} > "${EPFILE_PATH}/${FILE_NAME}"
done < ${SERIES_LIST}
else
getEpisodes ${1}
fi
Alles anzeigen
Es parst den Episodenguide auf der Seite und erzeugt daraus eine Liste im passenden Format für den VDRSeriesTimer. Dazu kann man den Seriennamen aus der fernsehserien.de-URL als Argument übergeben oder in einer Konfigurationsdatei vorgeben.
Beispiel "The Flash":
Eine Suche nach "The Flash" auf http://www.fernsehserien.de und folgendes durchhangeln zum Episodenguide führt zu folgender URL: http://www.fernsehserien.de/the-flash/episodenguide. Daraus ergibt sich der Serienname "the-flash", den das Skript als Argument erwartet und gibt beim Aufruf damit folgendes aus:
vdradmin@vdr:~$ /opt/scripts/fernsehserien2episodelist the-flash
# SEASONLIST
# 1 18 18
# /SEASONLIST
#
#SE EP No. Title
#
# 1. Season
1 1 1 Blitzschlag
1 2 2 Der schnellste Mensch der Welt
1 3 3 Offene Rechnung
1 4 4 Captain Cold
1 5 5 Plastique
1 6 6 Mann aus Stahl
1 7 7 Unter Strom
1 8 8 Flash vs
1 9 9 The Man in the Yellow Suit
1 10 10 –
1 11 11 –
1 12 12 –
1 13 13 –
1 14 14 –
1 15 15 –
1 16 16 –
1 17 17 –
1 18 18 –
Alles anzeigen
Man kann das Ganze auch automatisieren, in dem man eine Konfigurationsdatei (bei mir unter /etc/vdr/fernsehserien.conf) anlegt, die wie folgt aussieht:
#Format:
#Fernsehserien-Name==Serien-Titel
#
# Links von '==' befindet sich der Serientitel aus der Fernsehserien-URL
# Rechts von '==' befindet sich der Serien-Titel, aus dem auch der
# Episoden-Listen-Dateinname erzeugt wird mittels anhängen von .episodes
#devious-maids==Devious Maids
castle==Castle
navy-cis-l-a==Navy CIS: L.A.
navy-cis==Navy CIS
anger-management==Anger Management
the-flash==The Flash
Alles anzeigen
Das Skript schreibt dabei die Episodendatei dabei jedesmal neu.