IMDb, Rotten Tomatoes und Metacritic neben der TMDB-Wertung
IMDbs eigene Schnittstelle kostet Geld, Rotten Tomatoes vergibt Zugänge nur an Partner, Letterboxd hat gar keine offene. OMDb liefert alle drei in einer Antwort, über die IMDb-Kennung, die ohnehin schon an jedem Film steht. **Eine Tabelle und kein Feld je Quelle.** `Movie.Rating` ist ein Skalar ohne Quellenangabe, und das war richtig, solange es eine Quelle gab. Für drei weitere wären es drei Spalten — und bei der vierten wieder eine Migration. Jetzt ist jede Quelle eine Zeile, je Titel und Quelle eine, mit eindeutigem Index darauf: ein zweiter Lauf schreibt um statt anzuhäufen. **Zwei Werte je Bewertung, und beide gebraucht.** Der normierte Wert zum Vergleichen und Sortieren, die Anzeige zum Hinschreiben. Rotten Tomatoes in „8,7 von 10" umzurechnen wäre eine Lüge über die Quelle — dort steht 87 %, und genau so kennt man es. **Wieder keine zweite Metadatenquelle.** `IBewertungsquelle` liefert Bewertungen, sonst nichts. Bei Titel und Beschreibung wären zwei Anbieter zwei Wahrheiten; bei einer Bewertung ist jede Quelle eine eigene Zahl, und da sind mehrere kein Widerspruch, sondern der Sinn der Sache. **Ohne Kennung wird nicht gefragt.** OMDb kennt nur den Weg über die IMDb-Kennung; nach einem Titel zu suchen hiesse, denselben Zuordnungsfehler ein zweites Mal zu riskieren. Und auf Unbekanntes antwortet OMDb mit 200 und `Response: "False"` — das als Treffer durchzulassen legte eine leere Bewertung ab, die danach als „keine Wertung" dastünde. Angezeigt wird mit Kürzel statt Stern: vier gleich aussehende Zahlen nebeneinander sagen nicht, woher sie kommen. Kein Logo — die Marken von IMDb und Rotten Tomatoes mitzuliefern hiesse, fremde Zeichen auszuliefern. Kein mitgelieferter Schlüssel, aus demselben Grund wie bei fanart.tv: OMDb begrenzt auf tausend Abrufe am Tag je Schlüssel. Einzutragen unter Einstellungen → Übersicht → Metadaten. 740 Tests grün, davon acht neue. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
97edb49564
commit
af2b844d65
@@ -436,7 +436,16 @@ public sealed record MovieResponse(
|
||||
string? SortTitle = null,
|
||||
|
||||
/// <summary>Ob der Sortiertitel von Hand gesetzt wurde.</summary>
|
||||
bool SortTitlePinned = false);
|
||||
bool SortTitlePinned = false,
|
||||
|
||||
/// <summary>Bewertungen von anderswo — leer, wenn keine Quelle eingerichtet ist.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Neben <c>Rating</c>, nicht statt dessen.</b> Das Feld ist die
|
||||
/// Wertung von TMDB und bleibt, wo es ist; ein Client, der nur das
|
||||
/// kennt, zeigt weiter dasselbe wie bisher.
|
||||
/// </remarks>
|
||||
IReadOnlyList<Fremdwertungsantwort>? ExternalRatings = null);
|
||||
|
||||
public sealed record CreditResponse(
|
||||
Guid Id, string Name, string Role, string? Character, string? Image);
|
||||
@@ -498,7 +507,16 @@ public sealed record SeriesResponse(
|
||||
string? SortTitle = null,
|
||||
|
||||
/// <summary>Ob der Sortiertitel von Hand gesetzt wurde.</summary>
|
||||
bool SortTitlePinned = false);
|
||||
bool SortTitlePinned = false,
|
||||
|
||||
/// <summary>Bewertungen von anderswo — leer, wenn keine Quelle eingerichtet ist.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Neben <c>Rating</c>, nicht statt dessen.</b> Das Feld ist die
|
||||
/// Wertung von TMDB und bleibt, wo es ist; ein Client, der nur das
|
||||
/// kennt, zeigt weiter dasselbe wie bisher.
|
||||
/// </remarks>
|
||||
IReadOnlyList<Fremdwertungsantwort>? ExternalRatings = null);
|
||||
|
||||
public sealed record EpisodeResponse(
|
||||
Guid Id, int Season, int Episode, string? Title, string? Overview, string? StillImage,
|
||||
@@ -524,7 +542,8 @@ public sealed record Page<T>(IReadOnlyList<T> Items, int Total);
|
||||
/// selbst nicht zurück — zum Anzeigen genügt, dass einer da ist.
|
||||
/// </param>
|
||||
public sealed record MetadataSettingsResponse(
|
||||
bool HasApiKey, string Language, bool UsingProjectKey, bool HasFanartKey = false);
|
||||
bool HasApiKey, string Language, bool UsingProjectKey,
|
||||
bool HasFanartKey = false, bool HasOmdbKey = false);
|
||||
|
||||
/// <summary>Was ein Client über der Mediathek anzeigen muss.</summary>
|
||||
///
|
||||
@@ -537,7 +556,7 @@ public sealed record MetadataSettingsResponse(
|
||||
public sealed record AttributionResponse(string Text, string LogoUrl, string Url);
|
||||
|
||||
public sealed record MetadataSettingsRequest(
|
||||
string? ApiKey, string? Language, string? FanartApiKey = null);
|
||||
string? ApiKey, string? Language, string? FanartApiKey = null, string? OmdbApiKey = null);
|
||||
|
||||
/// <summary>Was der Server über die Wiedergabe entscheidet.</summary>
|
||||
///
|
||||
@@ -720,6 +739,12 @@ public sealed record StreamResponse(
|
||||
int? AudioStream,
|
||||
IReadOnlyList<SpurAuskunft> AudioStreams,
|
||||
IReadOnlyList<SpurAuskunft> SubtitleStreams);
|
||||
/// <summary>Eine Bewertung von anderswo, fertig zum Hinschreiben.</summary>
|
||||
///
|
||||
/// <param name="Source">„imdb", „rottenTomatoes", „metacritic".</param>
|
||||
/// <param name="Display">Was dastehen soll — in der Form, die man von der Quelle kennt.</param>
|
||||
public sealed record Fremdwertungsantwort(string Source, double Value, string Display);
|
||||
|
||||
public sealed record RatingRequest(int? Rating);
|
||||
|
||||
/// <summary>Was ein Benutzer mit einem Titel zu tun hatte.</summary>
|
||||
|
||||
Reference in New Issue
Block a user