PvD Ok, danke für den Hinweis. Allerdings muss ich mir wenn ich es recht verstehe anhand von Titel und Jahr dann die entsprechende TMDB-ID an der TMDB API beschaffen, und kann dann wiederum das Poster dafür abrufen, korrekt? Oder bekomme ich diese ID von KODI raus? So weit ich es bisher gesehen habe leider nicht.
Tinder für Kodi -> K-inder
-
sam7 -
3. Juni 2025 um 22:08 -
Unerledigt
Am Samstag (06.09.25) Vormittag werde ich ein Update der Forensoftware (inkl. aller Plugins) durchführen. Das Forum wird deshalb auf unbestimmte Zeit nicht verfügbar sein. Neuigkeiten wird es im Matrix Chat geben: https://www.kodinerds.net/thread/79927-freischaltung-matrix-chat/
-
-
Das PVR Artwork Modul sucht anhand von Titel und Jahr, da eine TBMD-Id im EPG nicht enthalten ist, in der MyVideo.db aber schon. Kann man per JSON-Query abfragen.
-
-
Und nochmal ein kleines Update.
Jetzt wird bei einem perfecct match (Alle Teilnehmer haben zugestimmt) eine persistente Toast-Message angezeigt, die bei Klick die Top/Flop Liste öffnet.
-
PvD Ok, danke. Das gucke ich mir dann auch mal bei Gelegenheit genauer an. Hatte gehofft, dass man von der KODi API auch die TMBD-Id bekommt. Und noch mehr hatte ich gehofft, dass man alles "KODi intern" regeln kann.
Aber egal. Werde ich mich bei Gelegenheit auch nochmal drum kümmern.
-
-
Ich kenne mich mit den Feinheiten zwar überhaupt nicht aus, aber müßten die Grafik-URLs nicht auch in der Datenbank oder im .nfo File stehen, wenn man richtig gecrapt hat?
Ich nutze zwar nicht die normale Kodi Datenbank, da ich alles auf MySQL umgestellt habe, aber dort ist bei mir ein Eintrag mit den Grafiken zum Film zu finden.
Code<fanart><thumb colors="" preview="https://assets.fanart.tv/preview/movies/36670/moviebackground/never-say-never-again-526a9e017e7fc.jpg">https://assets.fanart.tv/fanart/movies/36670/moviebackground/never-say-never-again-526a9e017e7fc.jpg</thumb><thumb colors="" preview="https://assets.fanart.tv/preview/movies/36670/moviebackground/never-say-never-again-57d12a16b4d5d.jpg">https://assets.fanart.tv/fanart/movies/36670/moviebackground/never-say-never-again-57d12a16b4d5d.jpg</thumb><thumb colors="" preview="https://assets.fanart.tv/preview/movies/36670/moviebackground/never-say-never-again-57d12b2cd0a6c.jpg">https://assets.fanart.tv/fanart/movies/36670/moviebackground/never-say-never-again-57d12b2cd0a6c.jpg</thumb><thumb colors="" preview="https://assets.fanart.tv/preview/movies/36670/moviebackground/never-say-never-again-57f386e9603ad.jpg">https://assets.fanart.tv/fanart/movies/36670/moviebackground/never-say-never-again-57f386e9603ad.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/vjFHNFLkX162nqPFsD1oFQaDFE0.jpg">https://image.tmdb.org/t/p/original/vjFHNFLkX162nqPFsD1oFQaDFE0.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/45uCcAUB8Ljz3uKb1y1JHtT5aCT.jpg">https://image.tmdb.org/t/p/original/45uCcAUB8Ljz3uKb1y1JHtT5aCT.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/nWGhapdPM48ovHubnR4Z5o3CmZu.jpg">https://image.tmdb.org/t/p/original/nWGhapdPM48ovHubnR4Z5o3CmZu.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/qyNX1wpiHg6hcGGZmG5aCDPiXkp.jpg">https://image.tmdb.org/t/p/original/qyNX1wpiHg6hcGGZmG5aCDPiXkp.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/9J7SmzOa4Rae2RFIPTInTPP4J60.jpg">https://image.tmdb.org/t/p/original/9J7SmzOa4Rae2RFIPTInTPP4J60.jpg</thumb><thumb colors="" preview="https://image.tmdb.org/t/p/w780/2JyeiUzWoap1yN8gTC6lhAvCnwq.jpg">https://image.tmdb.org/t/p/original/2JyeiUzWoap1yN8gTC6lhAvCnwq.jpg</thumb></fanart>
PvD hast du vielleicht etwas mehr Ahnung?
Die Frage wäre dann halt nur, wie man das dann ausliest und ob es dann einen Unterschied macht, ob man jetzt die normale Kodi DB oder eine MySQL DB nutzt.
-
Bei getMovieDetails kannst Du als Parameter auch die uniqueID/imdbnumber abfragen, die man der TMDB-API übergeben kann:
-
-
Die Frage wäre dann halt nur, wie man das dann ausliest und ob es dann einen Unterschied macht, ob man jetzt die normale Kodi DB oder eine MySQL DB nutzt.
Es ist egal, welche Datenbank man da nutzt (ich habe hier auch mySQL), da die JSON-RPC mit beiden Datenbanken klar kommt. Auslesen funktioniert wie im Post #26, das Problem sind eher ungültige (veraltete) Links zu den Images - das behebt man i.d.R über ein erneutes Scrapen des Movies/Sets/TV Show etc. epp.
-
Bei getMovieDetails kannst Du als Parameter auch die uniqueID/imdbnumber abfragen, die man der TMDB-API übergeben kann:
Vielen Dank dafür! Ich hatte immer nach tmdbid direkt in der api gesucht und nicht gefunden ... jetzt weiß ich auch warum
ChatGPT hatte mir noch "imdbnumber", "tmdbnumber" vorgeschlagen ... was einen Fehler geworfen hat.
Das werde ich dann auf jeden Fall demnächst mal einbauen! Dann sollten die "toten Poster" nochmal mehr behoben sein!
-
-
Gerade nochmal ein kleines Update bereit gestellt
- Der Benutzername wird nun für 14 Tage in einem cookie gespeichert. Das heißt man muss ihn nicht zu jeder neuen Session eingeben, oder nach einem reload / rejoin.
- Die Top/Flop Sortierung wurde etwas angepasst. Während aktuell der erste match immer oben blieb, wird nun immer der neueste match angezeigt. Wenn man also (aus welchen Gründen auch immer) immer weiter voted, bleibt diese Liste nicht mehr starr, sondern ändert sich laufend.
Für den letzten Punkt musste die Datenbank ein wenig angepasst werden. Das heißt eine bereits vorhandene Datenbank ist damit nicht mehr kompatibel.
Noch ein kleines Update:
Generierung eines zufälligen Sessionnamesn und eines zufälligen Benutzernamens, damit man direkt loslegen kann.
Der zweite Nutzer hat als Vorauswahl direkt die zuletzt erstellte Session (und ebenfalls zufällig generierten Nutzernamen).
Somit sollte einem fixen Start nichts im Weg stehen
Der Benutzername wird natürlich trotzdem gespeichert / wiederverwendet.
-
Und noch ein Update.
Die (von wo auch immer) geholten Poster werden nun gecached. Eine Anleitung zum behalten des caches über sessions (genauer: Serverstarts) hinweg findet sich auf github unter https://github.com/FX7/kinder/blo…-detailed-start
Weiterhin viel Spaß
-
-
magst du gleich eine compose vorlage mit geben? das nutzen dann doch eher die Meisten mittlerweile
-
Ja, steht auch auf meiner Agenda
Da Du jetzt aber explizit gefragt hast, weiß ich dass das es vlt ein wenig vorrücken sollte
Könnte heute aber ein wenig knapp werden. Vermute aber dass ich es spätestens morgen hin bekommen sollte.
-
-
magst du gleich eine compose vorlage mit geben? das nutzen dann doch eher die Meisten mittlerweile
noob_at_pc Habe es doch noch fix gemacht. Konnte es aber nicht selber testen (muss los). Kannst Du Dir bitte die https://github.com/FX7/kinder/blo…ose-example.yml Datei mal angucken, ob das so hin haut? Wenn Du Lust hast, kannst Du auch gerne hier https://github.com/FX7/kinder/issues/16 was dazu kommentieren
Danke!
-
Nochmal kleine Update:
- Toast für match ein wenig angepasst: Neue Teilnehmer einer Session bekommen nicht alle (bisherigen) matches als Toast
- Wenn alle Filme angezeigt wurden, ist man bisher in einer Endlosschleife gelandet.
noob_at_pc Konntest Du Dir die docker-compose schon mal angucken / es ausprobieren? Wenn Du sagst das klappt, dann würde ich das noch in der Readme entsprechend anpassen. Danke!
-
-
so jetzt, leider startet er nur kurz:
Python
Alles anzeigenTraceback (most recent call last): File "/app/app.py", line 3, in <module> from config import Config File "/app/config.py", line 7, in <module> class Config: File "/app/config.py", line 16, in Config logging.basicConfig(level=level, # Setze das Logging-Level File "/usr/local/lib/python3.11/logging/__init__.py", line 2062, in basicConfig root.setLevel(level) File "/usr/local/lib/python3.11/logging/__init__.py", line 1464, in setLevel self.level = _checkLevel(level) ^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/logging/__init__.py", line 207, in _checkLevel raise ValueError("Unknown level: %r" % level) ValueError: Unknown level: "Level 'INFO'"
-
noob_at_pc Danke für das Feedback. Fehler sollte behoben sein.
Im Zuge dessen auch noch eine minimales Fehlerhandling im Frontend eingebaut. Das sollte ggf aber noch ausgeweitet werden
Kannst Du Dir das bitte nochmal angucken? Danke!
-
-
nope, keine wirkliche Veränderung
Python
Alles anzeigenTraceback (most recent call last): File "/app/app.py", line 3, in <module> from config import Config File "/app/config.py", line 7, in <module> class Config: File "/app/config.py", line 16, in Config logging.basicConfig(level=level, # Setze das Logging-Level File "/usr/local/lib/python3.11/logging/__init__.py", line 2062, in basicConfig root.setLevel(level) File "/usr/local/lib/python3.11/logging/__init__.py", line 1464, in setLevel self.level = _checkLevel(level) ^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/logging/__init__.py", line 207, in _checkLevel raise ValueError("Unknown level: %r" % level) ValueError: Unknown level: "Level 'INFO'"
-
noob_at_pc Das klingt als hättest Du die Datei nicht richtig aktualisiert. Steht in der Datei KT_LOG_LEVEL='INFO' oder KT_LOG_LEVEL=INFO
Ersteres ist falsch, zweiteres korrekt und sollte auch so in der aktuellen Datei bei GitHub stehen.
Danke Dir fürs Testen!
-
-
jo, ich wollte nur die Änderungen übernehmen, doof nur wenn man die nicht sieht
container läuft, aber ich hänge schon am Anfannnng - name eingeben und es steht immer da "Please enter a unique name!" und kommte nicht weiter.
kann man den iwie auf Deutsch stellen? nur so btw
Zitat* Serving Flask app 'app'
* Debugmode: off
2025-06-09 12:36:42 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://172.27.0.2:5000
2025-06-09 12:36:42 - werkzeug - INFO - Press CTRL+C to quit
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET / HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/bootstrap/bootstrap.bundle.min.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/bootstrap/bootstrap.min.css HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/bootstrap/bootstrap-icons.min.css HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/js/Fetcher.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/js/Login.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/css/style.css HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/js/index.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/js/Voter.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/js/SessionStatus.js HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /api/v1/session/list HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static//images/favicon-kodi.svg HTTP/1.1" 308 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /api/v1/user/list HTTP/1.1" 200 -
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /static/images/favicon-kodi.svg HTTP/1.1" 200 -
2025-06-09 12:36:56 - app - ERROR - Exception on /api/v1/movie/genres [GET]
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/urllib3/util/url.py", line 434, in parse_url
raise LocationParseError(url)
urllib3.exceptions.LocationParseError: Failed to parse:
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 433, in prepare_url
scheme, auth, host, port, path, query, fragment = parse_url(url)
^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/urllib3/util/url.py", line 449, in parse_url
raise LocationParseError(source_url) from e
urllib3.exceptions.LocationParseError: Failed to parse:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/routes/movie.py", line 138, in genres
data = listGenres()
^^^^^^^^^^^^
File "/app/api/kodi.py", line 59, in listGenres
return _make_kodi_query(QUERY_GENRES)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/kodi.py", line 63, in _make_kodi_query
response = requests.post(KODI_URL, json=query, auth=HTTPBasicAuth(KODI_USERNAME, KODI_PASSWORD))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 115, in post
return request("post", url, data=data, json=json, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 575, in request
prep = self.prepare_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/requests/sessions.py", line 484, in prepare_request
p.prepare(
File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 367, in prepare
self.prepare_url(url, params)
File "/usr/local/lib/python3.11/site-packages/requests/models.py", line 435, in prepare_url
raise InvalidURL(*e.args)
requests.exceptions.InvalidURL: Failed to parse:
2025-06-09 12:36:56 - werkzeug - INFO - 192.168.1.186 - - [09/Jun/2025 12:36:56] "GET /api/v1/movie/genres HTTP/1.1" 500 - -
Du musst IP und Port von deiner KODi Instanz eingeben. Also IP:Port, wobei Port voraussichtlich 8080 sein wird.
Er bekommt auf jeden Fall keine Verbindung zu KODi
-
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!