diff --git a/Jellyfin.Plugin.MetaShark.Test/SeriesProviderTest.cs b/Jellyfin.Plugin.MetaShark.Test/SeriesProviderTest.cs index 07fda54..c35319d 100644 --- a/Jellyfin.Plugin.MetaShark.Test/SeriesProviderTest.cs +++ b/Jellyfin.Plugin.MetaShark.Test/SeriesProviderTest.cs @@ -31,7 +31,7 @@ namespace Jellyfin.Plugin.MetaShark.Test [TestMethod] public void TestGetMetadata() { - var info = new SeriesInfo() { Name = "奔跑吧兄弟" }; + var info = new SeriesInfo() { Name = "一年一度喜剧大赛" }; var doubanApi = new DoubanApi(loggerFactory); var tmdbApi = new TmdbApi(loggerFactory); var omdbApi = new OmdbApi(loggerFactory); diff --git a/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs index b56ae2a..cd660dc 100644 --- a/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs +++ b/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs @@ -286,7 +286,15 @@ namespace Jellyfin.Plugin.MetaShark.Providers { case MovieInfo: var movieResults = await this._tmdbApi.SearchMovieAsync(name, year ?? 0, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); - var movieItem = movieResults.FirstOrDefault(); + // 结果可能多个,优先取名称完全相同的,可能综艺会有纯享版等非标准版本 + var movieItem = movieResults.Where(x => x.Title == name || x.OriginalTitle == name).FirstOrDefault(); + if (movieItem != null) + { + this.Log($"Found tmdb [id]: {movieItem.Title}({movieItem.Id})"); + return movieItem.Id.ToString(CultureInfo.InvariantCulture); + } + + movieItem = movieResults.FirstOrDefault(); if (movieItem != null) { // bt种子都是英文名,但电影是中日韩泰印法地区时,都不适用相似匹配,去掉限制 @@ -296,7 +304,14 @@ namespace Jellyfin.Plugin.MetaShark.Providers break; case SeriesInfo: var seriesResults = await this._tmdbApi.SearchSeriesAsync(name, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); - var seriesItem = seriesResults.FirstOrDefault(); + // 结果可能多个,优先取名称完全相同的,可能综艺会有纯享版等非标准版本 + var seriesItem = seriesResults.Where(x => x.Name == name || x.OriginalName == name).FirstOrDefault(); + if (seriesItem != null) + { + this.Log($"Found tmdb [id]: -> {seriesItem.Name}({seriesItem.Id})"); + return seriesItem.Id.ToString(CultureInfo.InvariantCulture); + } + seriesItem = seriesResults.FirstOrDefault(); if (seriesItem != null) { // bt种子都是英文名,但电影是中日韩泰印法地区时,都不适用相似匹配,去掉限制 @@ -310,7 +325,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers } - protected async Task GetTmdbIdByImdbAsync(string imdb, string language, CancellationToken cancellationToken) + protected async Task GetTmdbIdByImdbAsync(string imdb, string language, ItemLookupInfo info, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(imdb)) { @@ -319,18 +334,27 @@ namespace Jellyfin.Plugin.MetaShark.Providers // 通过imdb获取tmdbId var findResult = await this._tmdbApi.FindByExternalIdAsync(imdb, TMDbLib.Objects.Find.FindExternalSource.Imdb, language, cancellationToken).ConfigureAwait(false); - if (findResult?.MovieResults != null && findResult.MovieResults.Count > 0) - { - var tmdbId = findResult.MovieResults[0].Id; - this.Log($"Found tmdb [id]: {tmdbId} by imdb id: {imdb}"); - return $"{tmdbId}"; - } - if (findResult?.TvResults != null && findResult.TvResults.Count > 0) + switch (info) { - var tmdbId = findResult.TvResults[0].Id; - this.Log($"Found tmdb [id]: {tmdbId} by imdb id: {imdb}"); - return $"{tmdbId}"; + case MovieInfo: + if (findResult?.MovieResults != null && findResult.MovieResults.Count > 0) + { + var tmdbId = findResult.MovieResults[0].Id; + this.Log($"Found tmdb [id]: {tmdbId} by imdb id: {imdb}"); + return $"{tmdbId}"; + } + break; + case SeriesInfo: + if (findResult?.TvResults != null && findResult.TvResults.Count > 0) + { + var tmdbId = findResult.TvResults[0].Id; + this.Log($"Found tmdb [id]: {tmdbId} by imdb id: {imdb}"); + return $"{tmdbId}"; + } + break; + default: + break; } return null; diff --git a/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs index 5e4c9cb..f11eb28 100644 --- a/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs +++ b/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs @@ -136,7 +136,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers movie.SetProviderId(MetadataProvider.Imdb, newImdbId); // 通过imdb获取TMDB id - var newTmdbId = await this.GetTmdbIdByImdbAsync(subject.Imdb, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); + var newTmdbId = await this.GetTmdbIdByImdbAsync(subject.Imdb, info.MetadataLanguage, info, cancellationToken).ConfigureAwait(false); if (!string.IsNullOrEmpty(newTmdbId)) { tmdbId = newTmdbId; diff --git a/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs index 7860dec..5a86bc0 100644 --- a/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs +++ b/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs @@ -210,11 +210,15 @@ namespace Jellyfin.Plugin.MetaShark.Providers // 通过imdb获取TMDB id if (!string.IsNullOrEmpty(imdb)) { - var tmdbId = await this.GetTmdbIdByImdbAsync(imdb, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); + var tmdbId = await this.GetTmdbIdByImdbAsync(imdb, info.MetadataLanguage, info, cancellationToken).ConfigureAwait(false); if (!string.IsNullOrEmpty(tmdbId)) { return tmdbId; } + else + { + this.Log($"Can not found tmdb [id] by imdb id: \"{imdb}\""); + } } // 尝试通过搜索匹配获取tmdbId