„highschool musical 3" fand TMDB nicht, „high school musical 3" schon
Drei gemeldete Fälle, alle an TMDB nachgemessen statt vermutet: highschool musical 3 0 Treffer high school musical 3 2 Treffer, der richtige zuerst Harry Potter im Orden des Phoenix 0 Treffer Harry Potter 20 Treffer, der richtige darunter dr dolittle 13 Treffer, der richtige zuerst Der fehlende Punkt bei Dr. Dolittle war nie das Problem — diese Vermutung ist in Suchvarianten.cs festgehalten, damit sie nicht wiederkommt. Die Suche versucht jetzt der Reihe nach: den Titel wie er dasteht, dann das längste Wort an jeder Stelle getrennt (von der Mitte nach aussen, ohne Wörterbuch — „highschool" trifft nach 2 Versuchen, „jurassicpark" nach 5), dann von hinten gekürzt, bis zwei Worte übrig sind. Höchstens zehn Anfragen, und nur dann, wenn die erste gar nichts brachte. Und die Treffer werden nach Ähnlichkeit zum gesuchten Titel sortiert, nicht nach Beliebtheit. Über gemeinsame Worte ohne Akzente: so trennt „Harry Potter" den „Orden des Phönix" von „Harry Potter: Fireplace", und „Phoenix" findet „Phönix". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4b0323f955
commit
aeaf6eb578
@@ -83,9 +83,23 @@ public sealed class TmdbClient(
|
||||
public async Task<IReadOnlyList<MovieMetadata>> SearchMoviesAsync(
|
||||
string title, int? year, CancellationToken ct = default)
|
||||
{
|
||||
var alle = await AlleAsync<TmdbMovie>("search/movie", title,
|
||||
year is { } j ? ("year", j.ToString()) : null, ct);
|
||||
return alle.Select(m => Als(m, title)).ToList();
|
||||
foreach (var begriff in Suchvarianten.Fuer(title))
|
||||
{
|
||||
var alle = await AlleAsync<TmdbMovie>("search/movie", begriff,
|
||||
year is { } j ? ("year", j.ToString()) : null, ct);
|
||||
if (alle.Count == 0) continue;
|
||||
|
||||
// **Nach Ähnlichkeit zum gesuchten Titel, nicht nach Beliebtheit.**
|
||||
// Gefunden wird unter Umständen über einen gekürzten Begriff;
|
||||
// dann liefert TMDB zwanzig Treffer, und der richtige ist der mit
|
||||
// den meisten gemeinsamen Worten.
|
||||
return alle
|
||||
.OrderByDescending(m => Suchvarianten.Aehnlichkeit(title, m.Title, m.OriginalTitle))
|
||||
.Select(m => Als(m, title))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public Task<MovieMetadata?> GetMovieAsync(int providerId, CancellationToken ct = default) =>
|
||||
@@ -152,9 +166,19 @@ public sealed class TmdbClient(
|
||||
public async Task<IReadOnlyList<SeriesMetadata>> SearchSeriesAsync(
|
||||
string title, int? year, CancellationToken ct = default)
|
||||
{
|
||||
var alle = await AlleAsync<TmdbSeries>("search/tv", title,
|
||||
year is { } j ? ("first_air_date_year", j.ToString()) : null, ct);
|
||||
return alle.Select(s => Als(s, title)).ToList();
|
||||
foreach (var begriff in Suchvarianten.Fuer(title))
|
||||
{
|
||||
var alle = await AlleAsync<TmdbSeries>("search/tv", begriff,
|
||||
year is { } j ? ("first_air_date_year", j.ToString()) : null, ct);
|
||||
if (alle.Count == 0) continue;
|
||||
|
||||
return alle
|
||||
.OrderByDescending(s => Suchvarianten.Aehnlichkeit(title, s.Name, s.OriginalName))
|
||||
.Select(s => Als(s, title))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public Task<SeriesMetadata?> GetSeriesAsync(int providerId, CancellationToken ct = default) =>
|
||||
|
||||
Reference in New Issue
Block a user