Wie ich schon in anderen Blogposts geschrieben habe, ist es jetzt für mich an der Zeit mich mit KI in der Programmierung auseinanderzusetzen, ob ich das nun schön finde oder nicht.
Und am besten ist, man übt am Beispiel.
Unser heutiges Problem, das es zu lösen gilt:
Ich sehe sehr gern YouTube und es hat sich da auch langsam eine kleine Historie angesammelt. Außerdem mag ich es, Sachen die ich schon einmal gesehen habe, auch wieder zu finden, was mit der YouTube internen Historiesuche so LaLa funktioniert. Also warum nicht alle YouTube-IDs lokal speichern, dazu noch die englische und deutsche Untertitel für die Durchsuchbarkeit? Eine perfekte Aufgabe für Gemini, die sollten sich mit Webseiten aus dem Google-Imperium doch auskennen. Es gibt Gründe, warum ich das immer haben wollte, jedoch nie die Muse hatte, das selbst zu programmieren. Websiteripping is a bitch.
Prompt:
Ich hätte gern ein Programm, das mir meinen YouTube-Verlauf speichert und zusätzlich die englischen bzw deutschen Untertitel. Wichtig ist, sie sind auf meiner Festplatte, ich bin offen für sqlite und/oder youtube-dl.
Gut als Prompt ist das eher eine 3 minus, aber er macht seine Aufgabe. Was mir aufgefallen ist, gegenüber früheren KI Antworten vor ein paar Monaten, dass jetzt eher eine Auswahl von Lösungswegen gegeben wird, anstatt gleich Code durchzubrettern. Und es präsentierte mir auch die drei Wege, die mir eingefallen wären. Erstens Datendownload von Google anfordern, Nachteil dauert immer ein paar Stunden bis der Link fertig ist und müsste ich regelmäßig machen oder zweitens die Seite direkt auslesen, einerseits automatisch mit Selenium oder manuell mit einem Browserskript. yt-dl direkt zu nutzen ging leider nicht, da die Historie ein Feed ist und kein Kanal. Ich hatte mich fürs manuelle Skript entschieden und dafür braucht's aber auch noch ein Backend. Aufbau ganz kurz, ein Skript wird vom Firefoxbrowser in die YouTube-Seite injiziert und dann sendet das Schript die Youtubeids an einen lokalen Server/Backend und speichert das ganze in einer Datenbank und fragt noch Youtube nach den Untertiteldateien.
Und auch hier war das Backend kein Problem, Pythonskript mit Flask Server, yt-dl und sqlite3, fertig. Das Einzige, was ich wirklich bemängele ist, dass mir Gemini nicht gesagt hat, dass ich eine Virtuelle Umgebung (venv) anlegen sollte für Python. Das räumt immer alles schön auf und wer jemals mit Abhängigkeiten kämpfen durfte, achtet auf solche Kleinigkeiten.
Die Daten aus der YouTube-Seite zu bekommen und an den Python Server zu senden, ist eine ganz andere Hausnummer. API fällt aus, da Googles Änderungen an der API (V3) das nicht mehr zulässt. Der Silogedanke ist stark in den Unternehmen verankert und einer der Gründe, warum die Seiten regelmäßig umgebaut werden. Das heißt, selbst wenn ich alles zum Laufen bekomme, keine Ahnung, wie lange das dann auch laufen wird.
Auftritt Tampermonkey. Wer Tampermonkey nicht kennt, dieses Plugin, das es auch für Chrome gibt, erlaubt es einen, Skripts in bestehende Webseiten zu laden. Und hier beginnen auch die Probleme. In der Theorie ist das alles ziemlich simpel, DOM überwachen, URLs raus ziehen und an Server senden, fertig.
Probleme
Auftritt CORS.
Quellübergreifende (Cross-Origin) Anfrage blockiert: ... (Grund: CORS-Anfrage war nicht http).
Lange Rede kurzer Sinn, intern reden Tampermonkey und Firefox wohl über eine Data Verbindung und mit
@connect 127.0.0.1
kann man beide Parteien dazu überreden, doch HTTP zu nutzen, damit CORS sich nicht so hat. Aber das ist genau die Art von Fehler, wo ich früher teilweise lange hätte Googlen müssen, bis @connect als Lösung erscheint.
Um das Ganze mal abzukürzen:
zu den Problemen gesellten sich,
– dass YouTube die YouTube-ids nicht mehr in dem Format hatte wie Gemini sie erwartet hat,
– Gemini vergessen hatte, dass es ein Lasy-Loading Problem ist, d.h. es fand nur die ersten 5 und hörte dann mit Nachsehen auf.
– dass für den Untertiteldownload die YouTube-API gehämmert wurde und deswegen ein 429 Fehler kam
– Tampermonkey durch Violentmonkey ersetzt werden musste, aufgrund des Sandbox/CSP-Handling von Tampermonkey.
– yt-dl zwingend Node benötigt, um die Boterkennung in YouTube zu umgehen.
Über die letzten zwei Punkte würde ich gerne noch reden. Ich hatte mich nie wirklich damit auseinandergesetzt, wie Tampermonkey und Violentmonkey sich jetzt in Firefox in die Webseite rein geladen. Und nach einigem Nachlesen bin ich mir nicht sicher ob es wirklich nötig war von Tampermonkey zu Violentmonkey zu wechseln. Außer halt, dass Violentmonkey komplett Open-Source ist und Tampermonkey, dass nur früher einmal offen war. Mir ist bekannt, dass Google in Chrome mit V3 starke Beschränkungen eingebaut hat, da ich aber das Skript für Firefox entwickelt habe, ist mir wiederrum nicht ganz klar, was wirklich nötig ist.
Und zum letzten Punkt, ich hab's noch nicht hinbekommen, dass yt-dl mein installiertes Node findet. Keine Ahnung, was da wieder los ist. Ein node -v in der Konsole gibt mir eine Version. Ich wette, das ist wieder so ein dummer Fehler. Da es aber eher in die Fehlerklasse Administration und/oder DevOps fällt, will ich es mal hier für den Programmierteil weglassen.
Abschließend zur KI-Programmierung:
Gegenüber meinen früheren Test ging das wirklich besser voran. Was mir wirklich geholfen hatte, war die Skripterstellung für Violentmonkey, da sich das Wissen in diesem Bereich so aller halben Jahre ändert. Und in diesem Zusammenhang hat es mir Zeit erspart. Auch in der Fehleranalyse war es sehr brauchbar im Erkennen von Fehlern.
Ob ich jetzt wirklich Zeit in der Gesamtheit der Programmierung gespart habe, wage ich zu bezweifeln, da Gemini dauernd Schusseligkeitsfehler gemacht hatte, die dann alle erstmal wieder debuggt werden mussten, die mir wahrscheinlich nicht in dem Maße passiert wären.
Im nächsten Blogpost schreibe ich euch, wie ich, naiv wie ich bin, versuche mit Claude einen StatusCake-Clone zu programmieren und dabei feststelle, dass es anscheinend kaum reine EU Softwaredienstleister gibt, also welche die Immun vom Digital Cloud Act sind.