This commit is contained in:
cxfksword 2022-12-23 21:43:10 +08:00
parent 66bafb9199
commit ef4509d3f6
2 changed files with 66 additions and 53 deletions

View File

@ -13,6 +13,8 @@ namespace Jellyfin.Plugin.MetaShark.Core
private static readonly Regex yearReg = new Regex(@"[12][890][78901234][0-9]", RegexOptions.Compiled); private static readonly Regex yearReg = new Regex(@"[12][890][78901234][0-9]", RegexOptions.Compiled);
private static readonly Regex seasonSuffixReg = new Regex(@"[ .]S\d{1,2}$", RegexOptions.Compiled); private static readonly Regex seasonSuffixReg = new Regex(@"[ .]S\d{1,2}$", RegexOptions.Compiled);
private static readonly Regex unusedReg = new Regex(@"\[.+?\]", RegexOptions.Compiled);
public static ParseNameResult Parse(string fileName, bool isTvSeries = false) public static ParseNameResult Parse(string fileName, bool isTvSeries = false)
{ {
var parseResult = new ParseNameResult(); var parseResult = new ParseNameResult();
@ -84,6 +86,9 @@ namespace Jellyfin.Plugin.MetaShark.Core
// 电视剧名称后紧跟季信息时,会附加到名称中,需要去掉 // 电视剧名称后紧跟季信息时,会附加到名称中,需要去掉
name = seasonSuffixReg.Replace(name, string.Empty); name = seasonSuffixReg.Replace(name, string.Empty);
// 删除多余的[]信息
name = unusedReg.Replace(name, string.Empty);
return name.Replace(".", " ").Trim(); return name.Replace(".", " ").Trim();
} }

View File

@ -72,13 +72,13 @@ namespace Jellyfin.Plugin.MetaShark.Providers
{ {
// ParseName is required here. // ParseName is required here.
// Caller provides the filename with extension stripped and NOT the parsed filename // Caller provides the filename with extension stripped and NOT the parsed filename
var fileName = Path.GetFileName(info.Path) ?? info.Name; var fileName = info.Name;
var parseResult = NameParser.Parse(fileName); var parseResult = NameParser.Parse(fileName);
var searchName = !string.IsNullOrEmpty(parseResult.ChineseName) ? parseResult.ChineseName : parseResult.Name; var searchName = !string.IsNullOrEmpty(parseResult.ChineseName) ? parseResult.ChineseName : parseResult.Name;
info.Year = parseResult.Year; // 默认parser对anime年份会解析出错以anitomy为准 info.Year = parseResult.Year; // 默认parser对anime年份会解析出错以anitomy为准
this.Log($"GuessByDouban of [name]: {info.Name} [fileName]: {fileName} [year]: {info.Year} [search name]: {searchName}"); this.Log($"GuessByDouban of [name]: {info.Name} [year]: {info.Year} [search name]: {searchName}");
var result = await this._doubanApi.SearchAsync(searchName, cancellationToken).ConfigureAwait(false); var result = await this._doubanApi.SearchAsync(searchName, cancellationToken).ConfigureAwait(false);
var jw = new JaroWinkler(); var jw = new JaroWinkler();
foreach (var item in result) foreach (var item in result)
@ -94,18 +94,19 @@ namespace Jellyfin.Plugin.MetaShark.Providers
} }
//英文关键词搜,结果是只有中文/繁体中文时不适用相似匹配如Who Am I // bt种子都是英文名但电影是中日韩泰印法地区时都不适用相似匹配去掉限制
if (jw.Similarity(searchName, item.Name) < 0.8 && jw.Similarity(searchName, item.OriginalName) < 0.8) // //英文关键词搜,结果是只有中文/繁体中文时不适用相似匹配如Who Am I
{ // if (jw.Similarity(searchName, item.Name) < 0.8 && jw.Similarity(searchName, item.OriginalName) < 0.8)
if (!searchName.IsSameLanguage(item.Name) && !searchName.IsSameLanguage(item.OriginalName)) // {
{ // if (!searchName.IsSameLanguage(item.Name) && !searchName.IsSameLanguage(item.OriginalName))
// 特殊处理下使用英文搜索,只有中文标题的情况 // {
} // // 特殊处理下使用英文搜索,只有中文标题的情况
else // }
{ // else
continue; // {
} // continue;
} // }
// }
// 不存在年份需要比较时,直接返回 // 不存在年份需要比较时,直接返回
if (info.Year == null || info.Year == 0) if (info.Year == null || info.Year == 0)
@ -142,19 +143,20 @@ namespace Jellyfin.Plugin.MetaShark.Providers
continue; continue;
} }
// this.Log($"GuestDoubanSeasonByYear name: {name} douban_name: {item.Name} douban_sid: {item.Sid} douban_year: {item.Year} score: {score} "); // bt种子都是英文名但电影是中日韩泰印法地区时都不适用相似匹配去掉限制
//英文关键词搜,结果是只有中文/繁体中文时不适用相似匹配如Who Am I // // this.Log($"GuestDoubanSeasonByYear name: {name} douban_name: {item.Name} douban_sid: {item.Sid} douban_year: {item.Year} score: {score} ");
if (jw.Similarity(name, item.Name) < 0.8 && jw.Similarity(name, item.OriginalName) < 0.8) // //英文关键词搜,结果是只有中文/繁体中文时不适用相似匹配如Who Am I
{ // if (jw.Similarity(name, item.Name) < 0.8 && jw.Similarity(name, item.OriginalName) < 0.8)
if (!name.IsSameLanguage(item.Name) && !name.IsSameLanguage(item.OriginalName)) // {
{ // if (!name.IsSameLanguage(item.Name) && !name.IsSameLanguage(item.OriginalName))
// 特殊处理下使用英文搜索,只有中文标题的情况 // {
} // // 特殊处理下使用英文搜索,只有中文标题的情况
else // }
{ // else
continue; // {
} // continue;
} // }
// }
if (year == item.Year) if (year == item.Year)
{ {
@ -171,12 +173,12 @@ namespace Jellyfin.Plugin.MetaShark.Providers
{ {
// ParseName is required here. // ParseName is required here.
// Caller provides the filename with extension stripped and NOT the parsed filename // Caller provides the filename with extension stripped and NOT the parsed filename
var fileName = Path.GetFileName(info.Path) ?? info.Name; var fileName = info.Name;
var parseResult = NameParser.Parse(fileName); var parseResult = NameParser.Parse(fileName);
var searchName = !string.IsNullOrEmpty(parseResult.ChineseName) ? parseResult.ChineseName : parseResult.Name; var searchName = !string.IsNullOrEmpty(parseResult.ChineseName) ? parseResult.ChineseName : parseResult.Name;
info.Year = parseResult.Year; // 默认parser对anime年份会解析出错以anitomy为准 info.Year = parseResult.Year; // 默认parser对anime年份会解析出错以anitomy为准
this.Log($"GuestByTmdb of [name]: {info.Name} [fileName]: {fileName} [year]: {info.Year} [search name]: {searchName}"); this.Log($"GuestByTmdb of [name]: {info.Name} [year]: {info.Year} [search name]: {searchName}");
var jw = new JaroWinkler(); var jw = new JaroWinkler();
switch (info) switch (info)
@ -185,36 +187,42 @@ namespace Jellyfin.Plugin.MetaShark.Providers
var movieResults = await this._tmdbApi.SearchMovieAsync(searchName, info.Year ?? 0, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); var movieResults = await this._tmdbApi.SearchMovieAsync(searchName, info.Year ?? 0, info.MetadataLanguage, cancellationToken).ConfigureAwait(false);
foreach (var item in movieResults) foreach (var item in movieResults)
{ {
if (jw.Similarity(searchName, item.Title) > 0.8 // bt种子都是英文名但电影是中日韩泰印法地区时都不适用相似匹配去掉限制
|| jw.Similarity(searchName, item.OriginalTitle) > 0.8) // if (jw.Similarity(searchName, item.Title) > 0.8
{ // || jw.Similarity(searchName, item.OriginalTitle) > 0.8)
this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\""); // {
return item.Id.ToString(CultureInfo.InvariantCulture); // this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\"");
} // return item.Id.ToString(CultureInfo.InvariantCulture);
// 特殊处理下使用英文搜索,只有中文标题的情况,当匹配成功 // }
if (!searchName.IsSameLanguage(item.Title) && !searchName.IsSameLanguage(item.OriginalTitle)) // // 特殊处理下使用英文搜索,只有中文标题的情况,当匹配成功
{ // if (!searchName.IsSameLanguage(item.Title) && !searchName.IsSameLanguage(item.OriginalTitle))
this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\""); // {
return item.Id.ToString(CultureInfo.InvariantCulture); // this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\"");
} // return item.Id.ToString(CultureInfo.InvariantCulture);
// }
return item.Id.ToString(CultureInfo.InvariantCulture);
} }
break; break;
case SeriesInfo: case SeriesInfo:
var seriesResults = await this._tmdbApi.SearchSeriesAsync(searchName, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); var seriesResults = await this._tmdbApi.SearchSeriesAsync(searchName, info.MetadataLanguage, cancellationToken).ConfigureAwait(false);
foreach (var item in seriesResults) foreach (var item in seriesResults)
{ {
if (jw.Similarity(searchName, item.Name) > 0.8 // bt种子都是英文名但电影是中日韩泰印法地区时都不适用相似匹配去掉限制
|| jw.Similarity(searchName, item.OriginalName) > 0.8) // if (jw.Similarity(searchName, item.Name) > 0.8
{ // || jw.Similarity(searchName, item.OriginalName) > 0.8)
this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\""); // {
return item.Id.ToString(CultureInfo.InvariantCulture); // this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\"");
} // return item.Id.ToString(CultureInfo.InvariantCulture);
// 特殊处理下使用英文搜索,只有中文标题的情况,当匹配成功 // }
if (!searchName.IsSameLanguage(item.Name) && !searchName.IsSameLanguage(item.OriginalName)) // // 特殊处理下使用英文搜索,只有中文标题的情况,当匹配成功
{ // if (!searchName.IsSameLanguage(item.Name) && !searchName.IsSameLanguage(item.OriginalName))
this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\""); // {
return item.Id.ToString(CultureInfo.InvariantCulture); // this.Log($"GuestByTmdb of [name] found tmdb id: \"{item.Id}\"");
} // return item.Id.ToString(CultureInfo.InvariantCulture);
// }
return item.Id.ToString(CultureInfo.InvariantCulture);
} }
break; break;
} }