prof-membrane / plugin.video.zdf_de_lite

ZDF Mediathek
GNU General Public License v2.0
0 stars 0 forks source link

ZDF-Mediathek funktioniert nicht mehr #21

Open Scheiwe1 opened 5 years ago

Scheiwe1 commented 5 years ago

Hallo Zusammen,

seit etwa 1-2 Tagen kommt es zu einem Fehler, wenn man

Es wird die neueste Kodi-Version (Libreelec) genutzt und alle Addons inklusive der dazugehörigen Scripte (libzdf) wurden aktualisiert.

BG Scheiwe 1

TommyTaif commented 5 years ago

Moin,

das gleiche ist bei mir. Ist die Mediathek geändert worden oder ist der API key nicht in Ordnung? Hier die kodi.log

09:04:19.427 T:1454371760   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.IndexError'>
                                            Error Contents: list index out of range
                                            Traceback (most recent call last):
                                              File "/home/pi/.kodi/addons/plugin.video.zdf_de_lite/default.py", line 5, in <module>
                                                libzdf.list()
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 102, in list
                                                l = modes.get(mode,libZdfListMain)()
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 42, in libZdfListPage
                                                return libZdfJsonParser.parsePage(params['url'])
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 36, in parsePage
                                                response = getU(url,True)
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 18, in getU
                                                libzdftokengrabber.grepToken()
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdftokengrabber.py", line 8, in grepToken
                                                tokenPlayer = re.compile('"apiToken": "(.+?)"', re.DOTALL).findall(response)[0]
                                            IndexError: list index out of range
                                            -->End of Python script error report<--
09:04:19.442 T:1945580192   ERROR: GetDirectory - Error getting plugin://plugin.video.zdf_de_lite/?mode=libZdfListPage&url=https%3a%2f%2fapi.zdf.de%2fcontent%2fdocuments%2fmeist-gesehen-100.json%3fprofile%3ddefault
09:04:19.444 T:1945580192   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.video.zdf_de_lite/?mode=libZdfListPage&url=https%3a%2f%2fapi.zdf.de%2fcontent%2fdocuments%2fmeist-gesehen-100.json%3fprofile%3ddefault) failed

Gruß, TommtY

salamiforte commented 5 years ago

Ich hatte das Problem auch, heute geht es auf einmal wieder

TommyTaif commented 5 years ago

Danke für den Hinweis. Läuft bei mir auch wieder.

mosterta commented 5 years ago

Ich habe leider immer noch dasselbe Problem. Selber Log output wie oben.

hemathor commented 5 years ago

ich habe das problem seit zwei tagen auch, und es dauert noch an.

21:50:29.510 T:1527771904   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.IndexError'>
                                            Error Contents: list index out of range
                                            Traceback (most recent call last):
                                              File "/home/osmc/.kodi/addons/plugin.video.zdf_de_lite/default.py", line 5, in <module>
                                                libzdf.list()
                                              File "/home/osmc/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 99, in list
                                                l = modes.get(mode,libZdfListMain)()
                                              File "/home/osmc/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 36, in libZdfListShows
                                                return libZdfJsonParser.getAZ()
                                              File "/home/osmc/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 55, in getAZ
                                                response = getU("https://api.zdf.de/content/documents/sendungen-100.json?profile=default",True)
                                              File "/home/osmc/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 18, in getU
                                                libzdftokengrabber.grepToken()
                                              File "/home/osmc/.kodi/addons/script.module.libzdf/lib/libzdftokengrabber.py", line 8, in grepToken
                                                tokenPlayer = re.compile('"apiToken": "(.+?)"', re.DOTALL).findall(response)[0]
                                            IndexError: list index out of range
                                            -->End of Python script error report<--
42Swampy commented 5 years ago

Hatte gleiches Problem, hat aber gestern wieder funktioniert. Problem vielleicht bei ZDF?

salamiforte commented 5 years ago

ja, nun geht es wieder nicht seit 2 Tagen.

ElRaph commented 5 years ago

Ich konnte den Fehler im Code finden und habe ihn bei mir lokal gefixt, weiß aber nicht wie/wo/ob ich einen Pull-Request machen kann/darf. Der Fehler war in der file: repository.membrane/script.module.libzdf/script.module.libzdf-2.1.8.zip/script.module.libzdf/lib/libzdftokengrabber.py Zeile 8: tokenPlayer = re.compile('"apiToken": "(.+?)"', re.DOTALL).findall(response)[0]

Die regexpression muss wie in Zeile 7 "apiToken: '(.+?)'" lauten und nicht '"apiToken": "(.+?)"' Kleiner Unterschied, große Folgen, in der ZDF Homepage ist der apiToken als JSON mit ' umschlossen und dann findet die Regexpression keinen Token und will dann auf den Index 0 zugreifen, der dann nicht definiert ist -> IndexError: list index out of range. Wäre vermutlich stabiler erst zu schauen ob die Regexpression den Token gefunden hat und dann auf den Index zuzugreifen, falls es dann noch nötig ist. Ich kenne mich mit Python nicht so gut aus, aber ich würde die Stelle optimieren, wenn ich heraus finde wo/wie.

Im Anhang die gefixte libzdf, allerdings stimmt die Verison dann nicht, kann aber so als zip in kodi installiert werden. script.module.libzdf.zip

salamiforte commented 5 years ago

super arbeit, interessanterweise geht es heute auch so einfach wieder... mal sehen wie lange ;)

TommyTaif commented 5 years ago

Mit ElRaph's fix funktioniert die Suche / das Menü bei mir jetzt super, nur das Abspielen will nicht. Laut Log ist der Zugriff verboten. Wenn ich über einen Browser auf die URL zugreifen will, bekomme ich nur "Authentication parameters missing"

7:49:18.242 T:1497363376   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <class 'urllib2.HTTPError'>
                                            Error Contents: HTTP Error 403: Forbidden
                                            Traceback (most recent call last):
                                              File "/home/pi/.kodi/addons/plugin.video.zdf_de_lite/default.py", line 5, in <module>
                                                libzdf.list()
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 97, in list
                                                libMediathek.play(libZdfPlay())
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdf.py", line 48, in libZdfPlay
                                                return libZdfJsonParser.getVideoUrl(params['url'])
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 184, in getVideoUrl
                                                response = getU(url,False)
                                              File "/home/pi/.kodi/addons/script.module.libzdf/lib/libzdfjsonparser.py", line 20, in getU
                                                response = libMediathek.getUrl(url,header)
                                              File "/home/pi/.kodi/addons/script.module.libmediathek3/lib/libmediathek3utils.py", line 34, in getUrl
                                                return _request(url,headers,post,cookies)
                                              File "/home/pi/.kodi/addons/script.module.libmediathek3/lib/libmediathek3utils.py", line 82, in _request
                                                response = urllib2.urlopen(req)
                                              File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
                                                return opener.open(url, data, timeout)
                                              File "/usr/lib/python2.7/urllib2.py", line 437, in open
                                                response = meth(req, response)
                                              File "/usr/lib/python2.7/urllib2.py", line 550, in http_response
                                                'http', request, response, code, msg, hdrs)
                                              File "/usr/lib/python2.7/urllib2.py", line 475, in error
                                                return self._call_chain(*args)
                                              File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
                                                result = func(*args)
                                              File "/usr/lib/python2.7/urllib2.py", line 558, in http_error_default
                                                raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
                                            HTTPError: HTTP Error 403: Forbidden
                                            -->End of Python script error report<--
17:49:18.267 T:1945592480   ERROR: Playlist Player: skipping unplayable item: 0, path [plugin://plugin.video.zdf_de_lite/?url=https%3A%2F%2Fapi.zdf.de%2Ftmd%2F2%2Fngplayer_2_3%2Fvod%2Fptmd%2Fmediathek%2F181206_1925_sendung_nhk&mode=libZdfPlay]
TommyTaif commented 5 years ago

Ich versuche übrigens, aus Dänemark auf die Mediatek zuzugreifen. Haben die irgendein Geo Blocking eingeführt? Über nen Browser läuft alles super.

IntendedCrash commented 5 years ago

Das Problem ist: Es gibt zwei verschiedene API-Tokens. Einen für das Menü (als tokenMenu bezeichnet), um also sämtliche Sendungen erst einmal aufzulisten und einen zum Abspielen der Sendungen (als tokenPlayer bezeichnet).

Der Menü-Token ist der, der per Suche nach apiToken (ohne "") auf der Startseite (https://www.zdf.de) gefunden werden kann. Der Player-Token wäre wiederum mittels Suche nach "apiToken" (mit "") zu finden. Nur ist der inzwischen nicht mehr immer auf der Startseite vorhanden, sondern anscheinend nur ab und an (vermutlich abhängig davon, ob eine direkt abspielbare Sendung auf der Startseite angezeigt wird oder nur Links auf Sendungsseiten) und deshalb wirft der TokenGrabber dort ursprünglich einen Fehler, weil er den Player-Token dann nicht findet. Mit dem "Fix" wird wiederum der Player-Token aus dem Menü-Token erzeugt, was dann natürlich Probleme beim Abspielen macht, weil der Menü-Token kein gültiger Player-Token ist.

Mein Vorschlag wäre, die Grabber-URL zu ändern, nämlich nicht mehr https://www.zdf.de/ zu nehmen, sondern https://www.zdf.de/live-tv. Es braucht nämlich unbedingt eine Seite, die immer einen Player eingebettet hat, damit der Player-Token dort erscheint. Ich vermute, dass das auf der Live-TV-Seite garantiert sein dürfte.

Ich habe mal eine eigene Version mit diesem Fix angehangen. Ich hoffe, dass der etwas stabiler funktioniert.

script.module.libzdf.zip

TommyTaif commented 5 years ago

IntendedCrash, vielenm Dank für deine Arbeit. Läuft super :)

Scheiwe1 commented 5 years ago

Von mir auch vielen Dank.


From: TommyTaif notifications@github.com Sent: Saturday, December 8, 2018 10:50:31 PM To: prof-membrane/plugin.video.zdf_de_lite Cc: Scheiwe1; Author Subject: Re: [prof-membrane/plugin.video.zdf_de_lite] ZDF-Mediathek funktioniert nicht mehr (#21)

IntendedCrash, vielenm Dank für deine Arbeit. Läuft super :)

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fprof-membrane%2Fplugin.video.zdf_de_lite%2Fissues%2F21%23issuecomment-445492541&data=02%7C01%7C%7Ca7a666307d5f46dd4c5908d65d572d3b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636799026325223831&sdata=Vq%2BN89ONuYF18x8jfgop4cU91NldXhmfvUSE%2BQ36KBw%3D&reserved=0, or mute the threadhttps://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAqc00O_PrHdKZ_VKMdUhp2mJu4alv6QTks5u3DQngaJpZM4YnmBo&data=02%7C01%7C%7Ca7a666307d5f46dd4c5908d65d572d3b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636799026325223831&sdata=B0OXurIw%2F%2FsTonyhpSQFOopikkisM1JASNo3CwTJCkU%3D&reserved=0.

ElRaph commented 5 years ago

Hammer, vielen Dank!!! Jetzt verstehe ich den Code auch besser und ich habe dann wohl keinen Fehler gefixxt, sorry! Das einzig stabile wäre ein offizieller ZDF-Endpunkt bei dem man sich die API-Tokens holen kann, oder? Also zumindest solange bis das ZDF den Endpunkt ändert... Ich überlege gerade, ob man nicht bei der offiziellen ZDF-App tracken könnte wie die an die Tokens kommt. Man müsste ja irgendwie deren Requests analysieren können, oder hat das schon wer versucht/gemacht?

MichaelEFlip commented 5 years ago

Danke IntendedCrash, jetzt funktioniert auch bei mir die ZDF Mediathek wieder...

fastLion commented 5 years ago

Besten Dank IntendedCrash, hat mein Problem mit den ZDF-Mediathek-Addon gelöst. :-)