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 Langner

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.