Beiträge von skatulskijean

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/

    Hoffe ich erinnere mich auch dran , hatte vieles auf der Festplatte was ich angefangen hatte aber ohne Sicherung mir verloren gegangen ist.
    Meine Blödheit!

    Eine Api wäre schon aus dem Grund besser weil wir dort alle Informationen hätten und nicht verschiedene Sourcen wegen Fanart usw ansprechen müßten.


    Aber wie hast Du dir das vorgestellt:

    1. Stadt aus addon settings,Land aus Kodi Settings
    2.Zeige vorhandene Kinos in der Stadt .
    3. Zeige Filme die dort laufen
    4 wähle Film zeige Trailer


    oder :
    1.Stadt aus addon settings,Land aus Kodi Settings
    2 Zeige aktuell laufende Filme
    3.Wenn Film ausgewählt zeige Kinos in der Stadt in denen der Film läuft.
    4.klicke Kino meiner Wahl und sehe die Vorführungszeiten usw.

    Giebt es sowas nicht bereits?

    Doch die Möglichkeit gibt es über eine api .
    Hatte das als internationales Kino Addon schon mal angefangen aber nicht zu Ende geführt !
    Da mein Rechner oder besser gesagt die Festplatte damals den Huf hochgerissen hat .
    Muß ich mal am Wochende nachdenken welche api ich dazu genutzt hatte .


    Gruß Jan

    Ps war so ähnlich wie handelbar wie in der Cinetrailer Android app und natürlich multilingual

    Meinte das so mit den Funktionen .
    Mußt Du den Rest von den Gui Sachen noch als Funktion setzen und den path zur xml sowie die xbmc imports.
    Schon hast Du einen struktuierten Script.


    Ergebnis: ['blue', 'BMW M darkblue', 'BMW M blue', 'BMW Amber', 'selected', 'BMW M red', 'white']

    hab mich mal im web bissl umgesehen. und folgendes gefunden:

    Ja , Python 3 mußt Du dich nicht beschäftigen jedenfalls noch nicht für den Einsatz unter Kodi.
    Da wir noch auf Python 2.7 bauen.
    Minidom wäre auch noch eine Option.
    Aber für diese mini xml ist das alles
    überdimensioniert
    (mehr code ,mehr speicher und nicht schneller)

    Sieht zwar dann vielleicht aus als ob man mehr Ahnung haben würde.
    Aber simple ist besser!!


    Gruß Jan

    <color name="white" menutextcolor="true">FFFFFFFF</color>

    ist das der Teil der xml den du gerne neu schreiben willst?

    wenn ja könnten wir das z.B mit .replace machen.
    also mittels regex das suchen <color name=".*?" menutextcolor="true">.*?</color>
    (.*? würde dabei da ohne Klammern überlesen so das der regex passen würde egal welche Farbe oder Wert sich momentan dort befinden würde)
    in eine Variable speichern und dann mittels replace austauschen und die xml neu schreiben.

    Der Code des Scripts muß noch verbessert werden:

    Werde das mal heute Abend machen.
    Auf Jeden Fall solltest Du die xml auch wieder schließen .
    Ist sonst die ganze Zeit im Speicher und irgendwann hast Du eine korrupte Datei.
    Ich hatte im letzten Teil meines Addon Tutorial Das File Handling unter Python angesprochen.
    Da siehst Du wie man das macht.
    Öffne die xml am besten mit with statement dann wird sie automatisch geschlossen.
    Den Mode kannst du auslassen da ohne Angabe der default Mode genommen wird und der ist r also read only.
    Aus dem einlesen der xml machen wir eine Funktion (so ist sie dann auch in eventuellen anderen Scripts als Baustein einsetzbar)und aus ein paar anderen Sachen auch.
    Den regex oder später wenn wir mit replace innerhalb der xml etwas veränderrn sollten.
    setzen wir in einer Variable am Anfang des Scriptes so das eventuelle Änderungen nicht innerhalb der Funktion gemacht werden müssen.
    usw.


    Gruß Jan

    Kannst mir ja mal einen Download vom kompletten Skin mit deinen Veränderungen geben.
    So das ich besser innerhalb des Scriptes testen kann.

    Die Aufgabenstellung von Aufgabe 1 wird mir leider nicht klar.
    Was meinst du mit einer Funktion die die die Zahlen 1-25 hält ???

    Ja, doch nicht verständlich von mir ausgedrückt.
    Innerhalb der Funktion sollen auf einfachste Art und Weise mit dem geringsten Schreibaufwand die Zahlen 1-25 bereitgestellt werden und dann in der Funktion mit ihnen gearbeitet werden.

    So klarer zu verstehen?

    Gruß Jan

    [h1]Operatoren[/h1]

    Operatoren sind spezielle Symbole, die Rechenarten wie Addition und Multiplikation darstellen. Die Werte, die durch die Operatoren verknüpft werden, heißen Operanden
    Die meisten Operatoren für Zahlenwerte sind in Python ähnlich zu anderen Programmiersprachen.

    Hier eine Kurze Zusammenfassung zur Übersicht:


    OperatorBezeichnungBeispiel
    +, -Addition, Subtraktion10 -3
    *, /, %Multiplikation, Division, Rest27 % 7
    Ergebnis: 6
    +x, -xVorzeichen-3
    ~xBitweises Not~3 - 4
    Ergebnis: -8
    **Exponentiation10 ** 3
    Ergebnis: 1000
    or, and, notBoolsches Oder, Boolsches Und, Boolsches Nicht(a or b) and c
    in"Element von"1 in [3, 2, 1]
    <, <=, >, >=, !=, ==Die üblichen Vergleichsoperatoren2 <= 3
    |, &, ^Bitweises Oder, Bitweises Und, Bitweises XOR6 ^ 3
    <<, >>Shiftoperatoren6 << 3


    [h1]Die Vergleichsoperatoren:[/h1]

    Auf die Vegleichsoperatoren wollen wir näher eingehen:


    VergleichsoperatorBedeutung
    >=größer gleich
    <=kleiner gleich
    ==gleich
    !=ungleich


    Beispiele:

    Beispiel > ,<:

    Hier können wir gleich eine For Schleife mit if, else und elif benutzen
    und uns außerdem merken das eine Verkettung nur bei gleichen Dateityp möglich ist.
    Deswegen wird die gegeben Zahl die typ int ist mittels str(zahl) in der print Anweisung in einen String umgewandelt.

    Python
    Zahlen=[1,2,3,4,5,6,7,8,9,10]
    for zahl in Zahlen:
       if zahl > 5:
          print str(zahl)+' ist mehr als 5'
       elif zahl < 5:
          print str(zahl)+' ist weniger als 5'
       else:
          print str(zahl)+' ist gleich 5'

    >>>1 ist weniger als 5
    >>>2 ist weniger als 5
    >>>3 ist weniger als 5
    >>>4 ist weniger als 5
    >>>5 ist gleich 5
    >>>6 ist mehr als 5
    >>>7 ist mehr als 5
    >>>8 ist mehr als 5
    >>>9 ist mehr als 5
    >>>10 ist mehr als 5

    Beipiele ==:

    wir suchen die Zahl 6 in einer Liste:

    Python
    search=6
    Zahlen=[1,2,3,4,5,6,7,8,9,10]
    for zahl in Zahlen:
       if zahl == search:
         print str(zahl)+' gefunden.'
       else:
         pass


    >>>6 gefunden

    natürlich könnten wir das auch ohne das definieren der Variable Zahlen erreichen

    Python
    search=6
    
    
    for zahl in [1,2,3,4,5,6,7,8,9,10]:
       if zahl == search:
         print str(zahl)+' gefunden.'
       else:
         pass

    >>>6 gefunden


    Beispiel >=:

    Python
    search=6
    for zahl in [1,2,3,4,5,6,7,8,9,10]:
        if zahl >= search: 
           print zahl
        else:
           pass


    >>>6
    >>>7
    >>>8
    >>>9
    >>>10


    Beispiel <=:

    Code
    search=6
    for zahl in [1,2,3,4,5,6,7,8,9,10]:
        if zahl <= search: 
           print zahl
        else:
           pass

    >>>1
    >>>2
    >>>3
    >>>4
    >>>5
    >>>6

    Beispiel !=:

    Python
    search=6
    for zahl in [1,2,3,4,5,6,7,8,9,10]:
        if zahl != search: 
           print zahl
        else:
           pass


    >>>1
    >>>2
    >>>3
    >>>4
    >>>5
    >>>7
    >>>8
    >>>9
    >>>10

    Aufgaben:

    Aufgabe 1:

    Erstellt euch eine Funktion searchZahl(search) die auf die einfachste Art und Weise und mit geringsten Schreibaufwand die Zahlen von 1-25 hält und probiert die veschieden Möglichkeiten aus!
    Benutzt dabei euer Wissen aus den vorherigen Teilen.

    Aufgabe 2:

    Das ist eine Textsearch so wie ich Sie in Addons verwende um ohne Beachtung der Groß und Kleinschreibung sowie auch nur mit Teil-Suche ein optimales Ergebnis zu erreichen.
    Klärt selbständig was die noch nicht in den Teilen durchgesprochenen Begriffe machen .
    Erklärt Euch den Code Zeile für Zeile selbst.

    Macht daraus eine Funktion um sie in eventuellen Addons von Euch später ohne große Veränderungen nutzen zu können.

    Füllt else mit Leben!

    Python
    search=''
    for name in ['Hans','Hannelore','Hanes','Hanf']:
        if ((name.upper()).find(str.upper(search))>=0):
          print name
        else:
          pass


    [h1]Datei-Handling[/h1]

    Wir kennen bereits verschiedene Arten von Dateien, wie Musik-Dateien, Video-Dateien, Textdateien.
    Python uns eine einfache Möglichkeiten diese Dateien zu manipulieren.
    Im Allgemeinen teilen wir Dateien in zwei Kategorien ein, Textdatei und Binärdatei.
    Die Textdateien halten einfachen Text
    Die binären Dateien enthalten binäre Daten, die nur von Computer lesbar sind.


    Datei-öffnen

    Um eine Datei zu öffnen verwenden wir die open () Funktion.
    Sie erfordert zwei Argumente:

    1. den Path zur Datei oder nur den Dateinamen
    2 welcher Mode zum öffnen benutzt wird.

    Die verschiedenen Modes sind:


    Mode Bedeutung
    “r”öffnet ein File(Datei)read only, Du kannst Die Datei nur lesen nichts editieren oder löschen.
    "w”öffnet eine Datei zum schreiben.Das bedeutet wenn der File existiert löscht es den Inhalt und öffnet den File(Datei) zum schreiben.
    "a"Öffnet ein File(Datei) im Append(hinzufügen) Mode .Das bedeutet das man dem Inhalt des Files etwas hinzfügen kann wobei der hinzugefügte Inhalt am Ende des vorhandenen Inhalts angehangen wird.

    Ohne Angabe des Mode wird der default Mode ausgeführt (nur lesen).

    Wichtig eine mit open geöffnete Datei muß immer zum Abschluß mit close() geschlossen werden.
    Arbeiten an ständig offenen Dateien kostet mehr Speicher und führt mit der Zeit zu einer korrupten Datei.

    Wir erzeugen eine Leere Textdatei:

    Beispiel:


    Python
    f=open('beispiel.txt','w')
    f.close()

    Erzeugt eine Leere Textdatei im Verzeichnis der ausgeführten py Datei.

    Wir schreiben in eine Textdatei:


    Beispiel:

    Python
    f=open('beispiel.txt','w')
    f.write('Das ist ein Test.\n')
    f.write('Python ist schon cool.\n')
    f.close()


    Wir lesen eine Textdatei:

    Beispiel:

    Python
    f=open('beispiel.txt')
    inhalt=f.read()
    print inhalt
    f.close()

    Wir fügen etwas Inhalt hinzu.

    Beispiel:

    Python
    f=open('beispiel.txt','a')
    f.write('wir lernen leider nicht schnell genug.\n')
    f.write('Denn auch Jan hat nicht immer ausreichend Zeit.\n')
    f.close()


    [h1]Das with Statement[/h1]

    Mit Benutzung des with Statement wird der File automatisch geschlossen so das wir uns das
    close() sparen
    So sind wir sicher das der Speicher nicht vollgemüllt wird und es zu keiner korupten Datei führt.


    Beispiel:

    Python
    with open('beispiel.txt') as f:
       for line in f:
          print line,

    Aufgaben :

    1. Alle Beispiele ausführen.
    2. Die verschiedenen Modi mit Benutzung des with Statments ausführen.
    2. Was macht \n?
    3. Was würde \t tun?
    3. Was macht print ,?
    4. Was oder worin besteht der Unterschied zum einlesen der Datei mit read() gegenüber den einlesen der Datei in einer for Schleife?

    1. mit der erweiterung menutextcolor="true" kann ich separieren welche farben ich hernehmen will, ohne dass die anderen berücksichtigt werden. weil die brauch die skin ja ebenfalls, aber machen sich als textfarbe evtl. nicht so gut.

    Wie würde die xml dann aussehen?

    3. wenn die custom farbe gewählt wurde, wäre es cool, wenn man sie in die xml speichern und löschen kann.

    Wie ist die Syntax der Xml und wo soll in dieser xml die gewähle Farbe eingesetzt werden.

    verstehe jetzt noch nicht richtig was du jetzt machen willst!Bis jetzt hatten wir eine XML die du über den Script ein liest und darin die Farbe in den dazugehörigen Wert erfasst .Was hast du jetzt vor?
    Ich nehme an du hast einen GUI mit dem du die Farbe dann auswählen kannst.
    Funktioniert das jetzt schon so und du kannst die Farbe wählen und sie wird im Skin dann auch gesetzt?
    Wenn ja was soll jetzt passieren.?
    Ist diese XML beim Start des Skins vorhanden und hält die Farben und den Wert wie in der Beispiel XML?
    Oder ist diese XML vorhanden und hält noch nichts?
    Oder ist diese XML beim Start des Skins nicht vorhanden ?
    Oder willst du ein neue XML erzeugen die dann die ausgewählte Farbe aus deinem GUI hält?

    Bis Morgen Jan

    mit Farben={} definiere ich ein leeres Dictionary mit den Namen Farben

    in der match suche ich über re.findall mit dem Regex name="(.*?)">(.*?)</ in der xml
    Das (.*?) bedeutet das ich diese Sachen Auslese denn es sind die 2 Sachen die für dich relevant sind.

    Würde ich match mit print match ausgeben.
    Würdest Du folgendes sehen:

    [('white', 'FFFFFFFF'), ('grey', 'FFb4b4b4'), ('grey2', 'FF999999'), ('grey3', 'FF505050'), ('black', 'FF000000'), ('blue', 'FF0084ff'), ('selected', 'FFEB9E17'), ('bmwamber', 'FFFF7E00')]

    in der for schleife definiere ich die Variablen
    for farbe,wert in match:

    Die Schleife läuft dann über match und ordnet in den durchläufen farbe und wert zu .
    Als Beispiel ein Durchlauf:
    ('white', 'FFFFFFFF') farbe =white , wert=FFFFFFFF

    in der nächsten Zeile fülle ich das leere Dictionary Farben mit Schlüssel und Wert Paar:
    Farben[farbe] = wert

    Beim ersten Durchlauf der Schleife sieht das dann zum besseren Verständnis so aus:
    Farben['white']='FFFFFFFF'
    Beim nächsten Durchlauf der Schleife wird die nächste Farbe mit Wert hinzugefügt usw.

    Ist der Durchlauf beendet hält das Dictionary alle Farben als Schlüssel und den dazugehörenden Wert

    Gruß Jan

    ja ,es ist kein XML Parser.
    XML Parser sind Python Module die nur für diesen Zweck geschrieben sind.
    sie verbrauchen mehr Platz als der alleinig Import von re.
    Ein reges sucht im Prinzip ein Muster.
    Wenn Du die XML Über Python öffnen und eine neue XML mit neuen Farben schreiben willst wird es etwas kompliziiert.
    mit re.findall suchst du das Muster (den Reges) in der Datei einen Steing oder was auch immer in diesen Fall eine XML.

    For leitet eine Schleife ein .

    Gruß Jan

    Entschuldige , hoffe kannst einigermaßen das lesen.
    bin hier am Android Tablet.

    Wir können gerne Morgen nochmal schreiben.
    Heute muß ich ins Bett .
    Muß Morgens früh raus.

    Gruß Jan