Bilder mit Umlauten in KODI-18 anzeigen [sog. oneliner bevorzugt]

  • Hallo etwas Pythonbewanderte,

    Kodiversion = Leia (18.8)
    In dem Addon "Welt der Wunder" gibt es Probleme Bilder mit deutschen Umlauten darzustellen.

    Beispiel: http://welt-der-wunder.s3-website.eu-central-1.amazonaws.com/sendungen/thumbnails/Filmtipp/Thumbnail-Drachenzähmen.jpg

    Eine Lösung dafür habe ich schon (aber):

    Python: test.py
    Foto = serie.find('img')['src'].encode('utf-8)
    		bild_1, bild_2 = Foto.split('//')[0], Foto.split('//')[1]
    		image = bild_1+'//'+urllib.quote(bild_2)

    Die Daten der Webseite von "Welt der Wunder" lese ich mit Hilfe von "BeautifulSoup" aus
    Die URL des Bildes muß aufgesplittet werden, da sonst beim "quoten" mit "urllib" der Doppelpunkt in der URL auch umgewandelt wird und dann das Bild NICHT angezeigt wird.

    Nun meine Fragen dazu:
    1. Gibt es für dieses Problem keine einfache Lösung ?
    2. Ist eine sog. Lösung als Python-Oneliner möglich (alles in einer Zeile) ?

    Ich bin für jeden Tipp dankbar.

    Gruß

  • Die URL des Bildes muß aufgesplittet werden, da sonst beim "quoten" mit "urllib" der Doppelpunkt in der URL auch umgewandelt wird und dann das Bild NICHT angezeigt wird.

    hast du es schon mit dem safe-Parameter beim Quoting versucht? Ich habe ein ähnliches Problem mit franz. Sonderzeichen beim arte-Modul und quote bei Bedarf so:

    Code
    if do_safe:
    		path = quote(path, safe="@:?.,-_&=/")

    außer dem Doppelpunkt kamen im Laufe der Zeit noch die weiteren Ausnahmen dazu (Fragez., Punkt usw.)
    /R

  • Du kannst mit urlparse eine URL in die einzelnen Bestandteile zerlegen, nur den path quoten und mit unsplit wieder zusammensetzen. Für ein Beispiel ist es aber jetzt schon zu spät ;)

    https://docs.python.org/2/library/urlparse.html

    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

  • path = quote(path, safe="@:?.,-_&=/")

    Das sieht doch schon mal sehr gut für meine Zwecke aus.

    Edit: Gerade ausprobiert, aber nicht so die Sahne auf dem Kaffee (jetzt verstehe ich auch die ganzen Ausnahmen die Du eingefügt hast).
    Da wird ja jetzt alles quotiert was nicht in den Ausnahmen steht, was vorher ohne die "safe" Methode nicht qoutiert wurde (finde ich nicht so dolle -leider).
    Das wird dann schwierig wenn ein Zeichen auftaucht welches nicht in den Ausnahmen steht. [af]

    Du kannst mit urlparse eine URL in die einzelnen Bestandteile zerlegen, nur den path quoten und mit unsplit wieder zusammensetzen. Für ein Beispiel ist es aber jetzt schon zu spät

    Dein Vorschlag ist ja ähnlich dem was ich mit der normalen "split" Methode schon in dem Script ausführe oder liege ich da sehr verkehrt ?? [bw]

  • Dein Vorschlag ist ja ähnlich dem was ich mit der normalen "split" Methode schon in dem Script ausführe oder liege ich da sehr verkehrt ??

    Ja, das passt schon. Allerdings quotest Du auch netloc (Domain), was in der Regel nicht notwendig ist. Auch für path sehe ich nicht unbedingt eine Notwendigkeit, da z.B. UTF-8 durchaus zulässig ist. Was machst Du z.B. damit: http://ru.wikipedia.org/wiki/Заглавная_страница

    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 wird dann schwierig wenn ein Zeichen auftaucht welches nicht in den Ausnahmen steht.

    ich fürchte, es gibt keine elegante Methode, die alle Anwendungsfälle abdeckt. Die Mischmethode aus Quoting und replace für einzelne Url-Teile ist auch bei mir häufig im Einsatz.Wäre aber schön, wenn hier doch ein genialer Einzeiler auftaucht.
    /R

  • Das Bild wird ja UTF8-encoded (sonst würde ich beim "quoten" diesen Fehler bekommen: KeyError: u'\xe4'), bloß Kodi kann's nicht anzeigen (überprüft mit [definition=9,2]kodi.[definition='1','0']log[/definition][/definition]).
    Nur wenn ich den enthaltenen Umlaut "quote" wird das Bild auch ausgegeben.
    Die Ausgabe von Webadressen ist ja okay wenn die Codierung stimmt, es geht nur um die Anzeige von Bildern. [ah]

    Nächster Versuch mit der Lösung von @rols1 unter "safe" die Werte "/:" eingetragen - wow... funktioniert selbst wenn z.B. das "@" Symbol in der Url auch "gequotet" wird:
    http://welt-der-wunder.s3-website.eu-central-1.amazonaws.com/sendungen/thum…thumbnail-1.jpg

    Mein vorläufiger -oneliner- sieht jetzt so aus:

    Code: test.py
    image = urllib.quote(serie.find('img')['src'].encode('utf-8'), safe='/:')


    P.S. Habe mir gerade zum besseren Verständnis die Funktionsbeschreibung von urllib.quote (PY2) durchgelesen - als kleiner Wink für Dich @rols1 = Letters, digits, and the characters '_.-' are never quoted.

  • Wenn Du auf url.query und url.fragment verzichten kannst (ist bei Deinem Beispiel auch nicht dabei), kannst Du beides mit None ersetzen. In jedem Fall benötigt urlunsplit aber einen 5er Tupel.

    Kommt an Deine Oneliner oben natürlich nicht ran ;)

    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

    Einmal editiert, zuletzt von PvD (5. Oktober 2020 um 16:56)

  • @BJ1

    Klar kann man bestimmt noch einiges verfeinern, aber Deine Methode scheint mir doch wie mit Schrot auf Spatzen zu schießen (natürlich übertrieben). [cl]

    Das könnte man dann ja auch mit der normalen ".split()" - Methode lösen indem man nur den letzten Teil der Url absplittet und dann "quoted" ?!

Jetzt mitmachen!

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