YourMJK / dreimetadaten

Die drei ??? Metadaten
http://dreimetadaten.de
23 stars 2 forks source link

Vereinfachung der programmatischen Verlinkung bei Spezial-Folgen #36

Open FPST-08 opened 3 days ago

FPST-08 commented 3 days ago

Aktuell ist es schwer programmatisch mithilfe des Namen eines Hörspiels zu dem entsprechendem JSON zu verlinken. Es wäre praktisch, wenn der Name des Hörspiels allein reichen würde um das JSON zu empfangen.

Zuerst der Titel aus Apple Music, dann der Begriff um die Daten zu erhalten. Beispiele: "Specialfolge: und das kalte Auge" -> "und-das-kalte-Auge" "Brainwash - Gefangene Gedanken" -> "Brainwash-Gefangene-Gedanken" "Adventskalendar - Stille Nacht, düstere Nacht" -> "Stille-Nacht-duestere-Nacht"

Es wäre sehr praktisch, wenn man allein die Leerstellen durch ein Minus und Umlaute durch deren Umschreibung ersetzen müsste und dann zur entsprechenden Seite weitergeleitet wird.

YourMJK commented 3 days ago

Sollte das nicht schon funktionieren? Oder verstehe ich das Problem nicht richtig? Hier deine Beispiele:

Zusätzlich zu den vollständigen JSON-Dateien (z.b. /web/data/Spezial.json) gibt es ja noch ein Verzeichnis für jedes Hörspiel, in welchem alle relevanten Dateien sind (mit u.a. metadata.json). Bei den Sammlungen "Spezial" und "Kurzgeschichten" sind die Verzeichnisnamen eben genau solche Vereinfachungen derer Titel, bei "Serie" ist es die Folgennummer mit führenden Nullen und bei "DiE DR3i" ist es gemischt, wegen der Spezial-Folge "Hotel Luxury End". Ich könnte natürlich noch überlegen, auch für "Serie" Weiterleitungen über den Titel einzurichten, vielleicht mit Symlinks.

Die Übersetzung von Titel zu Verzeichnisname ist relativ einfach, hier siehst du die zugelassenen Zeichen und die Ersetzungen (die restlichen Zeichen werden ausgelassen): https://github.com/YourMJK/dreimetadaten/blob/b75dd65efa539b74e499fa68131824baaf700067/code/dreimetadaten/Export/WebDataExporter.swift#L15-L29 (Du musst wahrscheinlich Scrollen, um den ganzen Code zu sehen. Hat mich auch irritiert.)


Ich weiß jetzt nicht genau, was dein Usecase ist und wie deine Anwendung funktioniert, aber eventuell wäre es da in Zukunft besser/zuverlässiger, direkt nach der Apple Music-URL (oder der ID darin) zu gehen, sobald ich die mit #28 hinzugefügt habe. Einmal von oben nach unten das vollständige JSON durchgehen, nach der URL suchen und den Metadaten-Link rausnehmen. Oder – wenn SQL ein Option ist – die Datenbank einlesen, in welcher die Apple Music-URL ein UNIQUE KEY sein wird. Dann geht das Ganze auch in O(1) statt O(n) dank Hashing ;)

FPST-08 commented 19 hours ago

Mein bisheriger Kommentar ist nicht ganz richtig bzw. das, was ich meinte. In meiner Anwendung werden Hörspiele an deren Titel und AlbumID von Apple Music identifiziert. Beides ermöglicht mir nicht bei Spezialfolgen oder Kurzgeschichten auf die URL zu deinen Metadaten zu schlussfolgern. Bei den normalen Serienfolgen kann ich die Nummer extrahieren und dann daraus die URL kreieren. Bei den Spezialfolgen und Kurzgeschichtenfolgen ist das nicht möglich. Zweierlei Probleme habe ich:

  1. Ich kann durch den Namen nicht darauf schließen, ob es sich um eine Kurzgeschichte oder um eine Spezialfolge handelt. Das ließe ich hardcoden, aber dann habe ich ein Problem mit zukünftig erscheinenden Folgen.
  2. Der in Apple Music angegebene Titel entspricht nicht immer dem Titel in deinem Datensatz. (z. B. bei Stille Nacht, düstere Nacht ist bei AM noch Adventskalender als Prefix vorhanden, bei "und das kalte Auge" steht ein "Spezial" davor.) Es macht Sinn, dass du diese Titel nimmst, aber ich kann den AM Titel nicht zu dem von dir verwendeten Titel transformieren und somit nicht auf die URL schließen.

Übersehe ich etwas? Nach deinem oben genannten Schema müsste die URL zu Brainwash .../Spezial/Brainwash---Gefan... statt .../Spezial/Brainwash-Gefan... lauten, da alle Leerstellen durch Kommas ersetzt werden sollen, korrekt?

Ein bisschen Off-Topic: Was meinst du mit Apple Music URL? Eine URL wie diese zu Folge 227? https://music.apple.com/de/album/folge-227-melodie-der-rache/1752449669?l=en-GB Apple ändert die IDs zu Apple Music Entities gelegentlich, somit würde die URL nicht mehr funktionieren.

Du meinst ich soll in Serie.json nach der Folge suchen und von da die Metadaten-URL nehmen? Das könnte funktionieren.

SQL ist aufgrund mangelnder Fähigkeiten meinerseits in naher Zukunft keine Option.

YourMJK commented 17 hours ago

Ich kann durch den Namen nicht darauf schließen, ob es sich um eine Kurzgeschichte oder um eine Spezialfolge handelt

Ahh okay, jetzt habe ich das Problem richtig verstanden :D Du weißt die Kategorie im Allgemeinen (noch) nicht und willst trotzdem direkt vom Titel auf meine URLs schließen.

Ich könnte natürlich solche Weiterleitungen einrichten, das wäre kein Problem (solange der Titel immer eindeutig ist, was jetzt genau genommen schon nicht der Fall ist, wenn man die einzelnen Kurzgeschichten berücksichtigt), aber das löst immer noch nicht die andere Hürde – wie du es auch schon erkannt hast, dein 2. Problem – dass die Titel in Apple Music nicht immer mit "meinen" exakt übereinstimmen.
Ich möchte meine Titel aber nicht auf die von AM anpassen, da die Metadaten dort sehr inkonsistent und manchmal einfach falsch sind (auf Anhieb hab ich z.B. gefunden: "Der 5. Advent" statt "und der 5. Advent"). Ich bleibe bei dem "Richtigen", bei dem, was z.B. auf den CD-Covern steht.

Du meinst ich soll in Serie.json nach der Folge suchen und von da die Metadaten-URL nehmen?

Das ginge (musst die anderen zwei JSONs natürlich auch durchsuchen), aber da stoßt du wieder auf das gleiche Problem, dass die Titel nicht übereinstimmen. Mit SQL das gleiche.

Übersehe ich etwas? Nach deinem oben genannten Schema müsste die URL zu Brainwash .../Spezial/Brainwash---Gefan... statt .../Spezial/Brainwash-Gefan... lauten, da alle Leerstellen durch Kommas ersetzt werden sollen, korrekt?

Korrekt, war mein Fehler, sorry.
Wo wir wieder bei der abweichende-Titel-Problematik wären: Bei mir ist der Titel des Hörspiels "Brainwash: Gefangene Gedanken", deswegen in der Ersetzung nur "Brainwash-Gefangene…" und nicht "Brainwash---Gefangene…"

Ohnehin halte ich es nicht für zielführend, zu versuchen, den eigentlichen Titel aus dem Albumnamen zu parsen. Wie du ja schon geschrieben hast, gibt es da manchmal Präfixe, manchmal Suffixe (z.B. "(Sechs Kurzgeschichten)") und manchmal eben nicht. Alle Extraregeln, die man da einbauen müsste, um diese Fälle 100%ig ohne hardcoding zu decken, könnten beim nächsten neuen Hörspiel oder bei der nächsten Änderung der Albennamen wieder versagen.


Ich denke, die einzig vernünftige Lösung für ein Mapping von Apple Music-Album zu einem Hörspiel in meinem Datensatz ist – eben genau die IDs bzw. URLs der AM-Alben zu verwenden.

Was meinst du mit Apple Music URL? Eine URL wie diese zu Folge 227?
https://music.apple.com/de/album/folge-227-melodie-der-rache/1752449669

Exakt, genau die!

Apple ändert die IDs zu Apple Music Entities gelegentlich

So wie ich das verstehe, stimmt das nicht ganz. Angebote kommen und gehen, wenn z.B. der Rechteinhaber wechselt.
Aber haben sich bei den drei ???-Hörspielen auf AM schonmal die IDs geändert? Ich glaube wenn ja, dann dürfte das nicht zu oft passieren. In dem Fall müsste ich dann die URL in meiner Datenbank aktualisieren. Aber das ist ja dann mein Problem und nicht deins :D

Und es gibt halt auch einmal Alben, die auf Apple Music zu streamen sind VS. Alben, die nur im iTunes Store zu kaufen sind. Das sind dann auch zwei verschiedene IDs, z.B.:


Wenn ich die URLs erstmal in den Metadaten drin hab, sollte das relativ leicht für dich zu nutzen sein – entweder über das JSON oder das TSV – und dann einfach von oben nach unten die URL/ID suchen. Wenn du das für alle Folgen machst, ist das dann zwar O(n²), aber das sollte bei so wenig Hörspielen kein Problem sein. Und mit SQL wäre es dann natürlich auch nur O(n).

Ich werde mich beeilen ;)

Um die ganzen URLs zu den Coverbildern auf Apple Music/iTunes zu bekommen, habe ich damals schon Listen mit den music.apple.com-URLs gemacht.
Z.B. diese hier, welche bis einschl. Folge 200 (außer 29) die iTunes Store-URLs enthält und danach die für Apple Music: itunes_links.txt Oder diese mit den Apple Music-URLs für Folge 1–48: itunes1-48_links_am.txt

Ich werde wahrscheinlich dann einfach jeweils beide Varianten – Apple Music und iTunes Store – pro Folge hinzufügen.