Autor: Friedhelm Büscher <vdr at 4t dot to>
License: GPLv2

Dieses Script lädt die Programmdaten von TVMovie (und anderen Anbietern)
herunter und trägt diese Daten als EPG-Daten im VDR ein. Sind bereits Daten
vorhanden und passen diese in etwa, werden nur die Inhalte, 
nicht die Zeiten aktualisiert. Existieren keine EPG-Daten, werden
die Daten von TVMovie komplett eingetragen. 


################################################################################


#### Hoerzu ####
################
Hoerzu hat einen Pilot gestartet, der offiziell das Downloaden der
EPG-Informationen erlaubt. Hierzu benötigt man ein PIN, den man per Email
bei contact@epgdata.com erfragen kann. In der Testphase ist ein solcher PIN
kostenlos. Die genauen Preise nach Abschluss der Testphase stehen noch nicht
fest. Hoerzu unterstützt übrigens EPG mit Bildern. Näheres siehe weiter
unten bei den Abhängigkeiten.


#### TVMovie ####
#################
Seit neuestem scheint TVMovie Probleme mit der Erzeugung korrekter gz-Dateien 
zu haben, jedenfalls sind die Dateien völlig verwürfelt. Die Funktion unscramble
sorgt für eine korrekte gz-Datei. Diese Funktion ist also als eine Art 
Fehlerkorrektur zu verstehen. Der Aufruf kann weggelassen werden, allerdings 
sind dann die heruntergeladenen Dateien unbrauchbar. TVMovie unterstützt
übrigens EPG mit Bildern. Näheres siehe weiter unten bei den Abhängigkeiten.


#### TVInfo ####
################
Weiterhin ist tvinfomerk2vdr.pl verfügbar, dass die Sendungen auf dem tvinfo-
merkzettel in vdr-timer importiert. Evtl. bestehende Timer werden am Prefix er-
kannt. Laufende Aufnahmen werden nicht aktualisiert.


#### InfoSAT ####
#################
Neuerdings gibt es einen Importer fuer Infosat-Daten. Hier muss der
Infosat-Scanner von Zzam (http://www.herzomedia.net/schwarzott/vdr/)
installiert sein. mit dem Script getinfosat.sh (thx, jabba) wird der
infosatscanner angeworfen, anschließend wird tvm2vdr aufgerufen.


################################################################################


#### erweitertes EPG ####
#########################
Am Ende des EPG-Eintrags werden spezielle Tags eingefügt, die weiterführende
Informationen zum Event enthalten. Zur Zeit sind folgende Tags vorhanden und
werden gefüllt, falls der Provider diese Daten liefert:

Director:	Regisseur
Casts:		Auzählung der Darsteller, Kommagetrennt, Rollennamen in
		runden Klammern
Category:	Kategorie der Sendung (Spielfilm/Serie/..)
Genre:		Genre der Sendung (Familie/Krimi/Drama/..)
Year:		Jahr der Produktion
Country:	Land der Produktion
Originaltitle:	Originaltitel
Audio:		Audioinformationen
Format:		Bildformat (4:3/16:9)
FSK:		FSK-Freigabe
Episode:	Folgennummer
Rating:		Bewertung - Ich verwende die Bewertung so, wie sie vom
		Provider kommt. tvmovie verwendet die 3 Bewertungen Tipp, TopTipp,
		TagesTipp. hoerzu verwendet die Bewertungen Schwach,Annehmbar,
		Gelungen,Großartig

Einige dieser Tags (insbesondere Bewertung und Audio) werden auch an den Anfang des
EPGs gestellt. Beides ist per konfiguration abschaltbar ($wantbottomflags, $wanttopflags)


################################################################################


#### Bilder im EPG ####
#######################

mit den Providern hoerzu und tvmovie ist es neuerdings möglich, Bilder
zusammen mit den EPG-Informationen zu laden. Hierzu muss in der config.pl
$writeimages auf 1 gesetzt werden. Die Bilder werden dann in $imagepath
(normalerweise /video0/epgimages) gespeichert. Achtung: tvmovie2vdr sorgt
NICHT dafür, dass alte Bilder gelöscht werden. Hierzu kann das script
tvm2vdr.sh verwendet werden.
Damit die Bilder angezeigt werden können, muss natürlich ein Skin verwendet
werden, der auch Bilder unterstützt. Hierzu gibt es einen patch von Emanuel,
der text2skin um Bildfähigkeiten erweitert. Ausserdem gibt es einen elchi-skin 
von _Frank_, der ebenfalls Bilder anzeigen kann




# ABHÄNGIGKEITEN
###############################################################################

Das Script benötigt einige Dateien, die nicht  im Standardlieferumfang 
von Perl enthalten sind:

Date::Manip
HTML::Entities
LWP::UserAgent
MD5

dazu startet man die CPAN-Shell mit:

	perl -MCPAN -e shell;	
	(evtl. muss beim ersten Aufruf einiges konfiguriert werden, irgendwann
	 hat man dan den cpan-prompt)

anschließend:
	install Date::Manip
	install HTML::Entities
	install LWP::UserAgent
	install MD5

Für tvinfo werden noch zwei weitere Module benötigt:
HTML::Scrubber
HTML::TableContentParser
Diese werden analog der obigen Anleitung installiert. Diese Module sind nur
nötig, falls tvinfo als Provider verwendet wird.

Für hoerzu werden zwei andere Module benötigt:
XML::Simple::DTDReader
Archive::Zip
Diese werden analog der obigen Anleitung installiert. Diese Module sind nur
nötig, falls hoerzu als Provider verwendet wird. Das Image::Magick-Modul
wird nur benötigt, wenn die Bilder von hoerzu extrahiert werden sollen.


Für Provider, die Bilder unterstützen (tvmovie, hoerzu) muss noch folgendes
Modul installiert werden:
Image::Magick

Weiterhin muss $writeimages auf 1 gestellt und natürlich ein Skin verwendet 
werden, der die Bilder entsprechend anzeigen kann.





# INSTALLATION:
###############################################################################

dieses Archiv auspacken (vermutlich bereits geschehen):

	$ tar xvzf tvmovie2vdr-x.y.z.tar.gz
	$ cd tvmovie2vdr.x.y.z

anschließend die Konfigurationsdateien anpassen:

# Konfigurationsdatei config.pl:
###############################################################################
  $channelsfile = "/video0/channels.conf";         # enthält den Pfad
                                                   # zur channels.conf
  $epgfile = "/video0/epg.data";                   # enthält den Pfad
                                                   # zu den epg-daten von vdr
  $days2download = 4; # max. 8 Days                # wieviel Tage sollen
                                                   # heruntergeladen werden
  $clearEPG = 0;                                   # EPG vor dem Eintragen löschen ?	
                                                   # 1 = löschen, 0 = nicht löschen
  $downloadprefix = "downloadfiles/";              # wo sollen die XML-Dateien
                                                   # liegen
  $updateprefix = "downloadupdatefiles/";          # wo sollen die aktualisierten
                                                   # XML-Dateien liegen
  $networktries = 1;                               # Anzahl versuche bei Netzwerkproblemen

  $abortonnetwork = 0;                             # Abbrechen, wenn es zu Netzwerkfehlern kommt?

  $networktimeout = 60;                            # Netzwerktimeout in Sekunden

  $wantbottomflags = 1;			           # soll erweitertes EPG verwendet werden?
  $wanttopflags = 1;                               # sollen Tags wie [DolbyDigital] ins EPG ?
                                                   # 1=ja, 0=nein.
  our $http_proxy = "";                            # Proxy verwenden ? BeispielURL: http://172.16.1.1:3128/
  our $tvicache_files = 1;                         # Dateien Cachen? 1=ja, 0=nein.
  $writeimages = 1;                                # sollen Bilder importiert werden?
                                                   # 1=ja, 0=nein (nur für Provider, die 
                                                   # Bilder unterstützen
  $imagepath = "/video0/epgimages";
  $cleanupoldfiles = 1;	                           # sollen alte cachedateien gelöscht 
                                                   # werden? 1 = ja, 0 = nein
  our $useupdate = 0;                              # Sollen für tvmovie die Updatefiles 
                                                   # verwendet werden? 1 = ja, 0 = nein
### TVMovie ###
  our $baseurl = "http://tvmovie......";           # Die URL für XML-Daten von tvmovie  
  our $aendurl = "http://tvmovie......";           # Die URL für Updatedaten von tvmovie
  our $tvmimgurl = "http://www........";           # Die URL zu den Bildern von TVMovie

### TVInfo Merkzettel ###
  our $username = "login";                         # Username für den TVInfo-Merkzettel
  our $password = "password";                      # Kennwort für den TVInfo-Merkzettel
  our $tvinfoprefix = "TVINFO+";                   # Prefix für Aufnahmen. Achtung, darf NICHT leer
                                                   # sein. Hiermit werden alte TVInfo-Timer erkannt.
  our $prio="99";                                  # Priorität für programmierte Timer
  our $lifetime="99";                              # Lifetime für programmierte Timer
  our $MarginStart = 4;                            # Puffer am Anfang der Aufnahmen
  our $MarginStop = 6;                             # Puffer am Ende der Aufnahmen
  our $merkzettelURL = "target=merk.inc";          # target für Merkzettel für TVInfo

### TVInfo ###
  our $http_base = "http://www.tvinfo.de/";        # URL zum Webauftritt von TVInfo
  our $loginURL = "exe.php3?";                     # Prefix zum Einloggen
  our $listeURL = "target=senderlist.inc";         # Prefix für Sender

### Hoerzu ###
  our $hoerzuurl = "http://www.e......";           # URL zum Angebot von  epgdata.com
  our $hoerzupin = "83........";                   # PIN von epgdata.com 

### Infosat ###
  our $infosaturl="/video/received_data";          # Pfad der infosat-Daten


zum Schluß müssen noch alle Sender, die aktualisiert werden 
sollen, in die channels.pl eingetragen werden. Hoerzu-Radiosender benötigen ein
"-r" vor der hoerzu-id, damit die Sendungsdetails korrekt geparsed werden können.
Dazu muss folgendes Format eingehalten werden:

# Konfigurationsdatei channels.pl:
###############################################################################
#
#
#                                                                TVMovie-ID(nicht ändern)
#                                                                   |
#    die ISO-Bezeichnung des        die channel-id. Bei             |    TVInfo-ID(nicht ändern)
#    Senders (nicht ändern)         Unsicherheit bitte              |      |
#       |                           printchannels.pl                |      |   TVInfo-Name(nicht ändern)
#       |                           benutzen                        |      |     |
#       |                                   |                       |      |     |   Hoerzu-ID(nicht ändern)
#       |                                   |                       |      |     |       |
#       |                                   |                       |      |     |       |    infosat channel name
#       |                                   |                       |      |     |       |	   |
#       |                                   |                       |      |     |       |	   |
#       v                                   v                       v      v     v       v	   v
@chan{"ard.de"}                      = ["S19.2E-1-1101-28106"    ,"001" ,"37"  ,"ARD" ,"71","ard"];
1;

Hier muss die channel-id und der gewünschte Provider konfiguriert werden.
Bitte darauf achten, dass die Datei mit "1;" endet.

Wegen wiederkehrenden Nachfragen hier nocheinmal: Falls es beim Einspielen
der EPG-Daten zu Fehlermeldungen kommt, BITTE die channel-id in der
channels.pl pruefen! Das Script printchannels.pl im Verzeichnis contrib/
liefert alle channel-ids aus der channels.conf Datei. Diese channel-ids
MUESSEN in die channels.pl Datei uebertragen werden!

in der Datei channels_wanted.pl wird dann eingetragen, von welchem Provider
man für welchen Sender EPG-Daten beziehen möchte:

# Konfigurationsdatei channels_wanted.pl:
###############################################################################
# Kanalliste, ordnet den Sendern ein Provider zu
#
#
#
#      die ISO-Bezeichnung des
#      Senders (nicht ändern)
#               |                         EPG von welchem
#               |                         Provider laden ?
#               |                         0=garnicht
#               |                         1=von tvmovie
#               |                         2=von tvinfo
#               |                         3=von hoerzu
#               |                         4=infosat
#               |                              |
#               v                              v
$chan_wanted{"ard.de"}                      = "1";
1;

auch hier bitte darauf achten, dass die Datei mit "1;" endet.


# AUFRUF:
###############################################################################

Usage: ./tvm2vdr.pl [options]

Options: -d hostname           destination hostname (default: localhost)
         -p port               SVDRP port number (default: 2001)
         -g                    get files online
         -v                    Show verbose messages
         -s                    Smulation Mode
         -h                    Show this help text


Options: -d hostname           destination hostname (default: localhost)
         -p port               SVDRP port number (default: 2001)
         -h                    Show this help text
         -v                    Show verbose messages
         -s                    Smulation Mode


# BEKANNTE PROBLEME:
###############################################################################

Unter bestimmten Umständen kann es zu doppelten EPG-Einträgen kommen. Um dieses zu beheben,
kann der beigefügte Patch von Emanuel Wontorra <horzu2vdr at wontorra dot net>, 
http://www.wontorra.net/filemgmt/index.php benutzt werden. Nach dem Patch kann der EPG-Scan 
für einen Sender abgeschaltet werden, indem in die entsprechende channels.conf-Zeile am 
Ende einfach ein :noscan (oder ein beliebiger anderer String) angefügt wird. 

Achtung: Diese Erweiterung wird bei der Verwendung des Scanner-Plugins wieder gelöscht!

disableEPG_part2.diff behebt das Problem, dass nach dem editieren der Kanäle dieser 
String wieder gelöscht wird.

Update: Der Patch hoerzu2vdrDisableEPG_0.0.4-1.3.6.diff ist der Komplettpatch 
zum Abschalten des EPG-Scans. Dieser patch funktioniert auch mit 1.3.12

Update : DisableEPGScan_1.3.15.patch ist der Komplettpatch für vdr-1.3.15.
steht in der letzten Zeile "epgscan", dann wird für diesen Kanal der
EPG-Scan von vdr durchgeführt, sonst nicht.

