Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Lizenziert unter CC by-sa von kalleboo auf Flickr

EPG zu deutschen Sendern in tvtime einblenden

| 37 Kommentare

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.

tvtime mit EPG Daten

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.

Autor: Christoph

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

37 Kommentare

  1. 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.

  2. 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.

  3. 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.

  4. Super, danke für die Anleitung.

  5. 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.

  6. 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

  7. @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

  8. 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

  9. @jug
    Vielen Dank für den Tipp, das behebt das Problem (bis zur nächsten Zeitumstellung ;) )

  10. 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

  11. Nabo, sieht leider so aus. Wenn man einfach nur

    tv_grab_de-py
    

    aufruft, dann kommen nur die Sendernamen rein, aber keine Sendungen… Ich schau mir das mal die nächsten Tage an…

  12. Super danke!
    Dachte schon ich mach was falsch…

    Gruß
    Nabo

  13. 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

  14. 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

  15. 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

  16. leider kann ich die seite nicht aufrufen… “Verbindung fehlgeschlagen”
    Ist das nur temporär?

    Gruß
    nabo

  17. Hallo Nabo, anscheinend hatte xmltv.info ein paar Probleme mit der Hardware…

    Wer xmltv.info schon laenger nutzt, wird sich fragen was aus den alten Seiten und vor allem dem Forum geworden ist. Wie schon auf der neuen Homepage erwaehnt habe ich meinen alten Server gekuendigt und nicht rechtzeitig die Forum-DB oder selbst deren Backups auf den neuen Server kopiert. Entschuldigt bitte, denn da waren sehr gute Beitraege dabei.
    Jetzt laeuft alles unter web2py.com einem Python-basierten Framework, das ich auch gerne in meinen anderen Projekten nutze. Ausserdem muss ich jetzt fuer einen Rootserver weniger zahlen.
    Alles sollte funktionieren, wie bisher auch wenn ich es selber leider nicht testen kann, da mein Mythtv in DE ich aber in Suedafrika bin.

    http://forum.xmltv.info/pyforum/default/index

    Der Link oben ins Forum ist leider futsch, der Beitrag gibt es nicht mehr. Schade…

  18. Danke! Werde ich mir gleich mal näher angucken.

  19. 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.

  20. super gleich mal testen :)

    Danke Stefan

  21. Ich nochmal…
    Stefan könntest du bitte einen Quelltext irgendwo pasten… die Änderung klappen bei mir nicht ganz…
    Danke.

    Gruß
    Nabo

  22. 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

  23. 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()

  24. 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.

  25. 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

  26. Nachtrag: :)
    Paste es vielleicht einfach mal bei paste.ubuntuusers.de
    ich hab mal meins gepastet: http://paste.ubuntuusers.de/396464/

    Gruß
    nabo

  27. 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

  28. 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

  29. 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

  30. autsch mein Fehler:
    in zeile 283 muss das print weg
    war zum testen.
    und nochmal:
    http://paste.ubuntuusers.de/396469/

  31. 1000 Danke Stefan!
    Es funktioniert.

    gruß
    nabo

  32. Hi stefan! Auch von mir ein dickes Dankeschön. Das tut nun auch wieder bei mir.

  33. Mensch, ich bin begeistert. Es läuft..

    Danke, Stefan!

  34. 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

  35. 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

  36. 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

  37. 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

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.