Episoden Infos von The TVDB abfragen

  • Hallo zusammen,

    eventuell kann mir hier nochmal jemand helfen.

    folgende Ausgangssituation:
    Ich habe folgende daten:

    TV-Show-Name: supernatural
    imdb-ID:78901
    Season-Nr. 1
    Episode-Nr.9

    ich möchte jetzt bei thetvdb die informationen ogen genannte folge Abfragen.
    Aber irgendwie komm ich mit den GetSeries und GetEpisode im API nicht klar...

    Irgendwie habe ich nicht vertanden, wie die requestURL aufgebaut sein muss...

    EDIT:

    okay, ich bin ein wenig weiter gekommen...

    http://thetvdb.com/api/.../series/78901/all/de.xml

    gibt mir eine xml mit allen daten aus die ich benötige
    damit sollte es ja dann möglich nur die Daten für die gewünschte Episode auszulesen...

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

    Einmal editiert, zuletzt von sveni_lee (18. März 2016 um 10:41)

  • hmm... so richtig schlau werde ich daraus nicht...

    ich hatte mir folgendes überlegt:

    klappt aber leider nicht...

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • Anstelle von Beautifulsoup würde ich minidom oder sax empfehlen. Sind nicht solche Schwergewichte für die vergleichsweise einfache Aufgabe. Ich kann Dir übers WE mal eine Lösung per minidom basteln...

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • hier mal mein erster Versuch mit minidom


    bringt aber folgenden Fehler:

    Code
    Traceback (most recent call last):
      File "G:\Testminidom1.py", line 37, in <module>
        get_desc_thetvdb()
      File "G:\Testminidom1.py", line 12, in get_desc_thetvdb
        name = xmldoc.getElementsByTagName("episode")[0]
    IndexError: list index out of range
    [Finished in 1.2s]

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • Code
    name = xmldoc.getElementsByTagName("episode")[0]


    Du versuchst auf das erste Listenelement [0] zuzugreifen. Nur leider gibt es keine Liste, nur eine einzelne Variable (wenn überhaupt). D.h. der Index [0] existiert nicht. Macht auch Sinn, denn es gibt immer nur eine Episode (unique).

    Code
    name = xmldoc.getElementsByTagName("episode")

    sollte funktionieren. Wenn Du noch etwas Geduld hast, mache ich dir was fertig, nur nicht heute. Da ist angeregtes Saufen mit Kumpels angesagt. ;)

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • so, die Abfrage funktioniert soweit...
    nur bekomme ich den Filter nicht hin, da ich mir ja nur die Deteil zu einer bestimmten
    Episode Anzeigen lassen möchte

    bspw: Staffel: 1
    Episode: 10

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • Du iterierst doch schon über alle Ergebnisse (ab Zeile 16). Innerhalb der Schleife muss nur ein beherztes 'If' (und bei Erfolg ein 'break') rein ;)

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • :)

    und genau damit habe ich meine Probleme...

    es müsse ja epino_tvdb.firstChild.data und seano_tvdb.firstChild.data mit der jeweilgen episode und staffel übereinstimmen


    und das bekomme ich irgendie nicht hin... da muss ich einen Denkfehler haben...

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • @BJ1

    so, nachdem ich jetzt mal ein Tag darüber nachgedacht habe (Wetter war zu schön und ich musste was im Garten machen), habe
    ich mich heute früh noch mal rangesetzt...

    sieht jetzt so aus:


    und lifert folgendes Ergebnis...

    Code
    74107
    Eine Frau, die lebendig begraben wurde, schafft es, sich zu befreien. Das Einzige, an das sie sich erinnern kann, ist, dass auf einem Schiff der Navy eine Bombe explodieren wird. Gibbs und sein Team werden eingeschaltet, um das Verbrechen zu verhindern. Es stellt sich heraus, dass die Frau für eine deutsche Firma arbeitet, die Bombensuchgeräte und Sprengstoffe herstellt. Gibbs hält die Frau für eine Terroristin, die selbst plant, ein Schiff in die Luft zu sprengen...
    [Finished in 3.1s]


    klappt also...

    gibt es eine schnellere methode?
    und kann ich die Ausgabe Episode.getElementsByTagName("Overview")[0].firstChild.nodeValue gleich in utf-8 wandeln?

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • gibt es eine schnellere methode?
    und kann ich die Ausgabe Episode.getElementsByTagName("Overview")[0].firstChild.nodeValue gleich in utf-8 wandeln?

    Die 3 Sekunden sind dem Laden der Seite geschuldet, wird also nicht schneller gehen. Minidom ansich und schon sehr schnell, da alle Knoten im Gegensatz zu Sax im Speicher gehalten werden und damit ein sehr schneller Zugriff möglich ist (Sax muss sich von Knoten zu Knoten hangeln und braucht dadurch mehr Zeit).

    Zum 2.: Häng' einfach ein encode('utf-8') hinten ran ;)
    Episode.getElementsByTagName("Overview")[0].firstChild.nodeValue.encode('utf-8')

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • ich nochmal...

    funktioniert soweit schon mal gaz gut...
    allerdings habe ich ein Proplem wenn Episode = 04 ist anstatt 4. in der xml sind alle EpisodeNumber ohne vorrangehende Null abgespeichert...

    EDIT:

    gefunden: episode = episode.lstripe('0')

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

    Einmal editiert, zuletzt von sveni_lee (20. März 2016 um 23:16)

  • Ich habe das ganze jetz mal in my Plugin eingebaut... funktioniert auch soweit.

    allerdings möchte ich das nicht nur ein wert zurückgegeben wird sondern alle Werte die ich von theTVDB haben möchte...

    ein

    Python
    return {epiid, epidesc}

    funktioniert zwar aber ich möchte danch auswerten

    wenn "epiid" in "return {epiid, epidesc}" vorhanden
    dann epiid = epiid, descr = descr usw.
    wenn nicht dann def(....)

    ich möchte vermeiden, jedes Detail einzeln abzufragen...


    EDIT:

    ich glaube so langsam beginne ich Python zu verstehen :)


    Python
    details = get_detail_thetvdb(imdbnumber, staffel, episode)
    epidesc = details['epidesc']

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

    Einmal editiert, zuletzt von sveni_lee (21. März 2016 um 11:54)

  • Du verwendest in Deiner Funktion zwei verschiedene Rückkehrwerte (einmal ein Dictionary bei Erfolg und dann ein return 0), das kann zu Problemen führen. Wenn die Fuktion mal wider Erwarten mit return 0 zurückkehrt - z.B. bei einer Epsiodennummer die es nicht gibt - Du aber details['irgendwas'] auswerten/verarbeiten willst, führt das zu einem Laufzeitfehler (NameError), da es das Element ja nicht gibt. Ich würde das Dictionary zunächst intitialisieren und dann notfalls eben mit einem leeren Dict zurückkehren.

    ich glaube so langsam beginne ich Python zu verstehen

    ;)

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • hmmm... okay, das bei nicht erfolg eine Null zurückkommt wusste ich.
    Ich hatte mir das so gedacht...


    oder habe ich da einen Denkfehler?

    Odroid N2+ 4GB 16GB eMMC CE
    TVHeadend Server/Client

  • So wie Du das angedacht hast, wird das schon funktionieren. Ich persönlich vermeide jedoch unterschiedliche Rückgabewerte/-typen. Dann lieber ein return False anstelle von return 0. Der Test sieht dann so aus:

    Aber wie gesagt, das ist auch Ansichtssache...

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Python
    from datetime import timedelta
    ende = timedelta(hours=21, minutes=12)
    start = timedelta(hours=20, minutes=15)
    
    
    print ende-start
    0:57:00

    ;)

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!