Episoden Infos von The TVDB abfragen

  • @BJ1:

    Ich schau mir grad deinen geänderten Code von TVHighLights genauer an :)

    Bsp.:

    Python
    TVDWatchtypes = ['spielfilm', 'serie', 'sport', 'unterhaltung', 'doku-und-info', 'kinder']

    wie könnte ich in dieser Zeile jedem Watchtyp eine Zahl zuzuordnen also

    spielfilm = 1, Serie = 2 usw?

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

  • Dann arbeitest Du mit einem Dictionary (Wörterbuch) und nicht mit einer Liste, z.B:

    Code
    TVDWatchtypes = {'spielfilm': 1, 'serie': 2, 'sport': 3}
    print TVDWatchtypes['serie']
    >>> 2

    Der Unterschied zwischen einer Liste[...] und einem Dict {...} ist der, das du auf die Elemente einer Liste nur über einen numerischen Index (0...) zugreifen kannst, bei einem Dict funktioniert der Zugriff auf ein Listenelement dagegen über den Namen. In anderen Programmiersprachen nennt man das auch assoziatives Array.

    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 wieder was gelernt... vielen dank!

    sag mal, würde das auch funktionieren

    Python
    details = get_detail_thetvdb(data.imdbnumber, data.staffel, data.episode)
                if not details:
                    writeLog("SerienPlaner: TVShow %s is not in TheTVDB" % (data.tvshowname), level=xbmc.LOGDEBUG)
                    details = WLScraper()
                    details.scrapeDetailPage(getUnicodePage(detailurl), 'div class="text"')


    falls auf der TheTVDB nicht gefunden wird soll er auf der detailURL danach suchen...

    die def sehen so aus...

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

  • Du haust in Deinen defs Klassenmethoden und allgemeine Funktionen durcheinander. Das wird krachen ;)

    In der 'get_detail_thetvdb' verwendest Du z.B. self.epiid = ... Das 'self.' bezieht sich aber immer auf eine Eigenschaft eines Objektes, die Du zuvor in einer Klasse definieren musst. Du hast aber kein Objekt bzw. eine Klasse, auf das sich das 'self' beziehen kann (oder es ist aus dem Kontext des Quelltextes nicht ersichtlich).

    Mit dem WLScraper nutzt Du dagegen den objektorientierten Ansatz ;)

    Aus einer Klasse kann man beliebig viele Objekte bauen. Man ist also nicht nur auf eine Ableitung (Instanzierung) beschränkt. Wir definieren mal ein Auto in einer Klasse und bauen anhand dieser Klasse 2 vollkommen unterschiedliche Auto-Objekte:

    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

  • sorry... richtig den Teil hatte ich nicht kopiert

    danke für die ausführliche Erklährung... Ich versuch mal mein Glück... :)

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

  • hmmm ich bekomme jetzt eine Fehlermeldung:

    Code
    SyntaxError: ("Non-ASCII character '\\xc3' in file G:\\KODI-Krypton\\portable_data\\addons\\plugin.program.serienplaner\\resources\\lib\\serienplaner.py on line 35, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details", ('G:\\KODI-Krypton\\portable_data\\addons\\plugin.program.serienplaner\\resources\\lib\\serienplaner.py', 35, 0, None))


    zeile 35 sieht so aus...

    Python
    channel = channel.replace(u' (Österreich)','').strip()

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

  • Du versuchst mit unicode zu arbeiten, hast aber das Encoding nicht festgelegt bzw. für Zeichenketten/Strings nicht definiert. Schreibe mal in die ersten beiden Zeilen ganz oben rein (solltest Du bei JEDER Python-Datei machen):

    Python
    #!/usr/bin/python 
    # -*- coding: utf-8 -*-

    Damit bist Du auch bei künftigen Python-Versionen auf der sicheren Seite, steht übrigens auch im Link zur Fehlermeldung:

    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 schon tauchen die ersten Fehler auf...

    Code
    Error Type: <type 'exceptions.NameError'>
     Error Contents: name 'pvrid' is not defined
     Traceback (most recent call last):
     File "G:\KODI-Krypton\portable_data\addons\plugin.program.serienplaner\default.py", line 461, in <module>
     writeLog("pvrid from external script: %s" % (pvrid), level=xbmc.LOGDEBUG)
     NameError: name 'pvrid' is not defined


    ich habe folgenden code an dem ich vermute das es liegen könnte in der default.py

    PHP
    WLURL = 'http://www.wunschliste.de/serienplaner/'
    Python
    SPWatchtypes = {'international': 1, 'german': 5, 'classic': 3, 'soap': 2}
    Python
    def scrapeWLPage(category):
        url = '%s/%s/0' % (WLURL, category)
        writeLog('Start scraping category %s from %s' % (category, url), level=xbmc.LOGDEBUG)
    
    
        content = getUnicodePage(url, container='<li id="e_')
        i = 1
        content.pop(0)

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

  • Der Fehler hat mit den Codeschnipseln nichts zu tun. Das Skript kennt die Variable 'pvrid' nicht, d.h. sie wird in Zeile 461 verwendet, wurde aber vorher weder deklariert noch gesetzt...

    Du kannst auch gern eine Konversation hier aufmachen, dann ist die halt nicht öffentlich einsehbar, wenn Dir das genehm ist ;)

    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

  • wird sie nicht hier definiert?

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

  • Nein. blob['pvrid'] ist was anderes als pvrid. Ersteres ist ein Element des Dicts 'blob', das zweite ist eine Variable namens 'pvrid'. Zwei verschiedene Dinge...

    Der blob aus deinem Post Episoden Infos von The TVDB abfragen ist genau so ein Dictionary wie SPWatchtypes aus Episoden Infos von The TVDB abfragen , nur halt übersichtlicher formatiert...

    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

  • okay... aber an welcher stelle wird dann die pvrid in TVHighlight definiert?
    Ich habe versucht mich daran zu orientieren...

    also an dieser stelle

    Python
    pvrid = urllib.unquote_plus(params.get('pvrid', ''))

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

  • Die kommt über einen Parameteraufruf des Scriptes rein:


    Python
    if len(sys.argv)>1:
        params = parameters_string_to_dict(sys.argv[1])
        methode = urllib.unquote_plus(params.get('methode', ''))
        detailurl = urllib.unquote_plus(params.get('detailurl', ''))
        pvrid = urllib.unquote_plus(params.get('pvrid', ''))

    Zeile 5. z.B.: xbmc.RunScript(plugin.program.tvhighlights, '?methode=switch_channel&pvrid=1234')

    Du hast mich allerdings noch auf einen Bug gebracht. In Zeile nach 438 muss noch ein pvrid = None rein. Ansonsten führt das zu genau deinem Fehler: Wenn keine Parameter übergeben werden (if len(sys.argv)... bleibt pvrid undefiniert.

    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

  • das sieht also so aus ob bi mir keine Daten gescraped werden...

    Ich habe nur folgendes in [definition='1','0']log[/definition] zu stehen...

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

  • Bei TVHighlights funktioniert das so:

    Die default.py wird von außen gesteuert. Einmal über die starter.py und dann über diverse Buttons in diversen Fenstern. Die starter.py ist quasi der Timer, welche die default.py zyklisch aufruft. Der Aufruf erfolgt jedesmal über spezielle Methoden, z.B.

    xbmc.executebuiltin('XBMC.RunScript(plugin.program.tvhighlights,"?methode=scrape_highlights")'). In diesem Aufruf hat die Variable 'methode' den Wert 'scrape_highlights'. Eine anderer Aufruf wäre xbmc.executebuiltin('XBMC.RunScript(plugin.program.tvhighlights,"?methode=switch_channel&pvrid=123")'). Jetzt haben wir den Parameter 'methode' mit dem Wert 'switch_channel' und den Parameter 'pvrid' mit dem Wert '123'...

    In der default.py wird dann die 'methode' (und andere Parameter) ab Zeile 440 ausgewertet und entsprechend verzweigt. Was in den TVHighlights der Service und was das Skript ist, steht wiederum in der addon.xml unter den 'extension point'.

    Ich weiss, der Schädel brummt jetzt ;)

    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

  • wenn ich auf Programme gehe und mein Scrpt aufrufe und auf ausführen gehe, wird dann nicht das scrapen ausgeführt?

    Nur, wenn Du deinem Programm in der __main__ auch gesagt hast, dass es scrapen soll. Da aber beim Weg über Programme -> Ausführen keine Parameter mitgegeben werden, wird dein Skript wohl nichts machen. Schmeisse alles unterhalb von


    Code
    # M A I N
    #________

    weg und ersetze es durch:

    Code
    if __name__ == '__main__':
       details = get_detail_thetvdb(imdbnumber, staffel, episode)
       epidesc = details['epidesc']
       ...usw.

    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 hab mir jetzt einfach einen Button angelegt mit dem ich das script richtig starten kann...

    jetzt bekomme ich einen Error den ich schon mal ganz am Anfang hatte...

    Code
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
     HTTPError: HTTP Error 403: Forbidden

    die seite möchte nicht von einer Maschiene Angesprochen werden...

    darum hatte ich ursprünglich folgendes drin:

    Python
    def getUnicodePage(url):
            headers = { 'User-Agent' : 'Mozilla/5.0' }
            req = urllib2.Request(url, None, headers)
    	return unicode(urllib2.urlopen(req).read(), "utf-8")

    aber dass müsste ja auf dein script angepasst werden...

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

Jetzt mitmachen!

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