Bei mir ist die Zeit noch etwas stehen geblieben. Fernsehen kommt noch aus der Wand und ist analog 😉 Daher muss ich auf schicke Dinge wie beispielsweise den elektronischen Programmführer via DVB, kurz EPG, verzichten. Dennoch gibt es Wege und Mittel das gute analoge Fernsehen noch etwas komfortabler zu gestalten. tvtime kann EPG-Daten in das Bild einblenden, doch leider gibt es kaum kostenlose legale Quellen. TV-Sender betrachten ihre Programminfos als wertvolles Gut und lassen Seiten, die von ihren Webseiten zusammengesammelte Programminfos automatisch aufbereiten, schnell aus dem Web verbannen.
Einen legalen und kostenlosen Weg geht xmltv.info. Hier werden die Informationen laut Homepage aus dem Videotext geholt und dann als EPG aufbereitet. Um rechtlichen Problemen aus dem Weg zu gehen, werden jedoch nur die Namen und Zeiten der einzelnen Sendungen genutzt und keine Beschreibungen der Programme.
Um xmltv.info nun mit einem Linux-System benutzen zu können gibt es ein Skript, das man erst herunterladen und entpacken muss. Zuvor muss man jedoch noch die Basis xmltv des Ganzen aus der Paketverwaltung heraus installieren.
$ sudo apt-get install xmltv-util
Anschließend kann man das Skript herunterladen und installieren.
$ wget -O /tmp/grabber-py.tar http://static.xmltv.info/grabber-py.tar $ cd /tmp $ tar -xf grabber-py.tar $ sudo mv tv_grab_de-py /usr/local/bin
Nun kann man sich daran machen tv_grab_de-py
zu konfigurieren. Über
$ tv_grab_de-py --configure
stellt man ein welche Senderinformationen abgerufen werden sollen. Die Konfiguration wird dann in der Datei ~/.xmltv/tv_grab_de-py.conf
abgelegt. Ab jetzt kann man die Programminfos abrufen. Der Befehl
$ tv_grab_de-py > ~/.xmltv/listings.xml
startet bspw. den Abruf und speichert die Programminformationen in der Datei ~/.xmltv/listings.xml
. Damit tvtime nun die Informationen einbindet muss man einmalig…
$ tvtime-configure --xmltv=~/.xmltv/listings.xml
…ausführen. Von jetzt an lädt tvtime die Infos aus der listings.xml und zeigt sie auch automatisch beim Programmwechsel oder beim Klick mit der linken Maustaste in das Fernsehbild an. Damit die Programminformationen automatisch aktualisiert werden, muss man noch einen Job für anacron erstellen. Dies geht am einfachsten mit einem Editor. Über bspw…
$ sudo gedit /etc/cron.daily/tv_grab
…legt man die Datei /etc/cron.daily/tv_grab
an und fügt den Inhalt
#!/bin/sh tv_grab_de-py --config-file=/home/<benutzername>/.xmltv/tv_grab_de-py.conf > /home/<benutzername>/.xmltv/listings.xml
ein. Dabei ersetzt man <benutzername> bitte mit dem eigenen Benutzernamen. Dies ist nötig, weil Anacron mit Root-Rechten ausgeführt wird. Ohne die Angabe der Pfade würde Anacron die Daten nach /root
ablegen. Nun fehlt nur noch das Recht das kleine Skript auszuführen, das man via
$ sudo chmod +x /etc/cron.daily/tv_grab
setzt. Von nun an sieht man was man sieht 🙂 Noch ein Hinweis: Die in tvtime eingetragenen Sendernamen müssen zu den durch xmltv gelieferten Namen passen. Sonst werden die Programminfos nicht angzeigt. Wahrscheinlich muss man daher die ~/.tvtime/stationlist.xml noch von Hand anpassen.
Hey! Vielen Dank für den Tipp. Das kannte ich ja gar nicht. Hatte mich mal mit nextvpg (oder wie auch immer das heisst) rumgeschlagen, konnte es aber nie wirklich zum laufen bekommen.
Kleiner Tip zum cronjob: Erst in eine temporäre Datei schreiben und nach erfolgreichem Grabben nach listings.xml verschieben. Das Grabben dauert oft sehr lange und wenn du während dessen Deinen Rechner runterfährst, hast Du beim nächsten Mal eine nicht zu kaputte xml-Datei.
Bei mir dauert das Laden der .xml Datei weniger als 15 Sekunden. Liegt wahrscheinlich daran, dass ja nur Titel und Zeiten heruntergeladen werden. Die .xml Datei ist auch nur ein paar kb groß. Von daher lohnt sich der Aufwand eigentlich nicht.
Super, danke für die Anleitung.
ich erinner mich noch schwach das zeug mal mit nxtvepg aus der austastlücke gezogen zu haben. ärgerlich war dabei aber, dass nur noch kabel1 die daten übertrug. so ists natürlich netter.
Netter Tipp, jetzt müsste ich nur noch herausfinden, warum die Zeiten nicht stimmen. Sämtliche Sendungsdaten sind eine Stunde verschoben. Es scheint fast so, als würde die Sommerzeit nicht berüchsichtigt.
~jug
@Jug
Grummel… jetzt merke ich, dass auch ich hier das Problem habe. Schau mal ins Forum von xmltv, da wird darüber diskutiert. Siehe http://forum.xmltv.info/viewtopic.php?f=2&t=10
Mein vorläufiger Würgaround, die Zeitzone mit sed im Cronjob anpassen:
tv_grab_de-py –config-file=/home/ … /.xmltv/tv_grab_de-py.conf | sed „s/+0100/+0200/g“ > /home/ … /.xmltv/listings.xml
@jug
Vielen Dank für den Tipp, das behebt das Problem (bis zur nächsten Zeitumstellung 😉 )
Kann es sein das xmltv zur zeit nicht geht? bei mir steht bei jedem sender „Keine Programminformation verfügbar“.
Oder ist das eine Einstellung bei mir?
Gruß
nabo
Nabo, sieht leider so aus. Wenn man einfach nur
aufruft, dann kommen nur die Sendernamen rein, aber keine Sendungen… Ich schau mir das mal die nächsten Tage an…
Super danke!
Dachte schon ich mach was falsch…
Gruß
Nabo
Ein kleiner Hinweis zum Problem mit der Zeitzone:
Auf http://xmltv.info/xw/default/wiki/Grabber gibt es eine verbesserte Grabber-Version. Sie wurde um die Funktion erweitert einen Offset auf den Start- und Endezeitpunkt jeder Sendung hinzuzuaddieren. Durch die Variable “’HOUR_OFFSET“‘ am Anfang des Grabbers kann eingestellt werden, wie viele Stunden zum Start und Ende hinzugezählt werden sollen.
Leider gibt es noch keine aktualisierten EPG-Daten auf http://static.xmltv.info/zeitschrift.
Gruss,
atalod
Gibt es denn, da es ja immer noch nicht funktioniert, eine andere Möglichkeit EPG Daten einzublenden? Außer die hier Beschriebende und mit nxtvepg?
Gruß
Nabo
Hi Nabo,
tvtime kann die Daten von http://www.tvprog.org/tv.xml lesen und darstellen.
Konfigurationsbeispiel:
* tv.xml in /home/{user}/.xmltv kopieren
* tvtime.xml anpassen:
option name=“XMLTVFile“ value=“/home/{user}/.xmltv/tv.xml“
option name=“XMLTVLanguage“ value=“de“
Gruss,
atalod
leider kann ich die seite nicht aufrufen… „Verbindung fehlgeschlagen“
Ist das nur temporär?
Gruß
nabo
Hallo Nabo, anscheinend hatte xmltv.info ein paar Probleme mit der Hardware…
http://forum.xmltv.info/pyforum/default/index
Der Link oben ins Forum ist leider futsch, der Beitrag gibt es nicht mehr. Schade…
Danke! Werde ich mir gleich mal näher angucken.
Hi,
also bei mir funktioniert das grabber skript so nicht richtig.
Die XML von http://www.tvprog.org/tv.xml lässt sich aber genauso gut auch durch das tv_grab_de-py Skript laden.
am besten durch das verbesserte von http://xmltv.info/xw/default/wiki/Grabber
mit HOUR_OFFSET=-2 für Mitteleuropäische Sommerzeit
Naja einige Anpassungen des Skripts sind notwendig:
1. natürlich die url ersetzen Zeile 29
SOURCES = (
'http://www.tvprog.org/tv.xml',
)
2. da sie nich gezippt ist lassen wir das zippen einfach weg:
doDownload() brauch nur noch res.read() zurückgeben (Zeile 72).
3. wenn man jetzt –configure durchführt kommt ein Fehler wegen UTF8 in Zeile 228, die Zeile ersetzen durch:
use = raw_input('Use channel %s (%s)? [y/N]' % (channel[1].encode( "utf-8" ), channel[0].encode( "utf-8" )))
4. dann kommen nochmal Fehler wegen einem nicht existenten Attribut group oder so. (im Ernst keine Ahnung warum aber wenn man die Variablen einfach weglöscht macht das nix)
So das is meine kleine Lösung. Sicher nicht unbedingt ausgefeilt (siehe Punkt 4) aber es funktioniert.
Ich habe jetzt EPG Informationen mit der richtigen Uhrzeit 🙂
Vielen Dank für die Anleitung und die Hinweise aus den Kommentaren.
super gleich mal testen 🙂
Danke Stefan
Ich nochmal…
Stefan könntest du bitte einen Quelltext irgendwo pasten… die Änderung klappen bei mir nicht ganz…
Danke.
Gruß
Nabo
Hallo Stefan,
Danke für Deine Lösung, Klasse! Könntest Du Deine gepatchte Version zur Verfügung stellen (z.B. über http://freetexthost.com/ )? Vielleicht bin ich zu blöd dafür. Hab’s leider nicht hinbekommen, das tv_grab_de-py Skript anzupassen.
Würde mich darüber sehr freuen.
Klappt es bei Dir, NABO?
Gruss,
atalod
Habe wohl doch noch etwas vergessen.
Ich vermute mal es liegt an der doDownload Funktion.
hier nochmal komplett:
def doDownload(source):
host = urlparse(source)[1]
url = urlparse(source)[2]
log.info(‚Downloading data from %s…‘ % host)
h = httplib.HTTPConnection(host)
headers = {
‚User-Agent‘: ‚%s %s‘ % (NAME, VERSION),
‚Accept-encoding‘: ‚xml‘,
}
h.request(‚GET‘, url, headers=headers)
res = h.getresponse()
if res.status != 200:
return False
log.info(‚Done‘)
return res.read()
ok habs da mal hochgeladen.
(danke für Tipp)
http://freetexthost.com/j6r0rr3w0e
was ich vorher noch weggelassen habe:
das Skript ersetzt bei mir das vom Artikel und ich nutze
den selben anacron job.
man muss nochmal
tv_grab_de-py –config
ausführen
Die Sendernamen in der XML von tvprog.org sind anders also mussten die ebenfalls angepasst werden.
Leider geht es immer noch nicht… er findet immer wieder fehler und wenn ich diesen beheben konnte, kommt ein neuer…
Auch dein gehostetes geht nicht.
Dort kommt ein:
File „/home/nabo/bin/tttttv“, line 42
try:
^
IndentationError: expected an indented block
Dann hab ich noch probiert die Änderungen einfach bei mir zu übertragen, dort kommt dann allerdings:
Traceback (most recent call last):
File „/home/nabo/bin/ttv_grab_de-py“, line 263, in
doc = ElementTree.parse(StringIO(text)).getroot()
File „“, line 45, in parse
File „“, line 32, in parse
SyntaxError: not well-formed (invalid token): line 1, column 0
Ich vermute mal deine Version geht nicht, weil nichts eingerückt ist.
Gruß
nabo
Nachtrag: 🙂
Paste es vielleicht einfach mal bei paste.ubuntuusers.de
ich hab mal meins gepastet: http://paste.ubuntuusers.de/396464/
Gruß
nabo
hi,
das mit dem einrücken habe ich nicht bedacht.
python eben.
bin gerade nicht zu hause, werde es heute abend noch mal dort
posten.
das einzige was ich bei deiner version als unterschied erkennen kann ist der header beim download:
zeile 61: aus ‚gzip‘ habe ich in ‚xml‘ geändert.
das hatte bei mir einen Fehler behoben.
ich weiss aber wirklich nicht ob es daran liegt.
kenne mich auch nicht so gut mit python aus.
cu
stefan
Das hört sich doch super an, bei mir ist nämlich schon wieder ein Fehler -.-
Traceback (most recent call last):
File „/home/nabo/bin/ttv_grab_de-py“, line 285, in
time.strptime(start_time, ‚%Y%m%d%H%M%S‘)
OverflowError: mktime argument out of range
Aber mal sehen ob deine Version dann funktioniert.
gruß
nabo
http://paste.ubuntuusers.de/396468/
hier eine nochmals gepatchte version.
bei mir kam der Fehler nie.
Grund war die Zeitangabe.
in der tv.xml ist nicht nur das programm für heute
es sind so gar einträge für das Jahr 2038 drin ????
naja eingefügt habe ich einfach eine Abfrage in Zeile 289, die prüft ob die Startzeit im Jahr 2010 liegt. Dann bricht er ab.
also muss man nächstes Jahr mal ändern.
komischerweise hat mein Rechner zu Hause das verkraftet, kann das am 64Bit Ubuntu liegen,
hier habe ich gerade ein 32Bit debian und hatte den selben Fehler wie du.
grüße
stefan
autsch mein Fehler:
in zeile 283 muss das print weg
war zum testen.
und nochmal:
http://paste.ubuntuusers.de/396469/
1000 Danke Stefan!
Es funktioniert.
gruß
nabo
Hi stefan! Auch von mir ein dickes Dankeschön. Das tut nun auch wieder bei mir.
Mensch, ich bin begeistert. Es läuft..
Danke, Stefan!
Hallo,
Ich benutze das modifizierte Skript von Stefan mit Mythtv. Das läuft eigentlich auch ganz gut. Allerdings habe ich ein Problem Aufnahmen mit den EPG Daten zu händeln. In der „title“ Zeile ist immer der Wochentag der Sendung angegeben. Dieser ändert sich am Tag der Sendung auf „Heute“, also z.B. von Donnerstag auf Heute. Dadurch erkennt Mythtv die Sendung nicht mehr, weil ja der Titel verändert wurde und nimmt nicht auf.
Leider kann ich kein Python um mich dem Problem anzunehmen. Im Grabber Code habe ich auch nichts in Richtung „title“ gefunden. Vielleicht kann mir jemand von euch ein kleines Workaround zukommen lassen, um die Infos in der Klammer beim Titel auszublenden. Ich wäre sehr dankbar :).
Gruß, Ben
http://paste.ubuntuusers.de/397098/
hier hab mal das script verändert.
bin auch kein python-profi aber so sollte funktionierts bei mir.
Die Änderung befindet sich in Zeile 309-313
die schleife durchläuft alle child elements.
und bearbeitet dann den Title (subelement.text)
ABER:
Der Titel wird einfach an der ersten ‚(‚ zerschnitten.
(siehe stringfunktion split)
Also Vorsicht wenn der Titel wirklich eine Klammer enthält bzw. enthalten soll. Falls du es anders machen willst -> jetzt weisst du wo der Titel ist 😉
Viel Spass damit
stefan
Danke für die Anpassungen im Skript. Nach den Beschreibungen hier ist es genau das, wonach ich suche. Leider funktioniert es bei mir nicht.
Kann es sein, dass das daran liegt, dass ich einen Proxy Server benutze?
Ich habe im Code keinen Hinweis auf dergleichen gesehen und weiß nicht ob Python HTTP_PROXY ausliest oder nicht.
Vielleicht wisst ihr das ja zufällig. Ich würde mich über eine Antwort freuen.
schönen Sonntag noch!
Paul
Hi,
das sollte eigentlich keine probleme machen.
ich benutze auch einen proxy.
und bei mir gehts.
kommt bei dir irgendwo ein fehler?
hast du alles genauso gemacht wie chris es beschrieben aht?
grüße
stefan