78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using JSMR.Application.Enums;
|
|
using JSMR.Domain.ValueObjects;
|
|
using JSMR.Infrastructure.Http;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace JSMR.Infrastructure.Scanning;
|
|
|
|
public partial class JapaneseVoiceWorksScanner(IHtmlLoader loader) : VoiceWorksScanner(loader)
|
|
{
|
|
[GeneratedRegex("(.*?)年(.*?)月(.*)", RegexOptions.IgnoreCase, "en-US")]
|
|
private static partial Regex EstimatedDateRegex();
|
|
|
|
[GeneratedRegex("販売日: (.*?)年(.*?)月(.*)日", RegexOptions.IgnoreCase, "en-US")]
|
|
private static partial Regex SalesDateRegex();
|
|
|
|
protected override Locale Locale => Locale.Japanese;
|
|
|
|
protected override SupportedLanguage[] SupportedLanguages =>
|
|
[
|
|
SupportedLanguage.Japanese,
|
|
SupportedLanguage.English,
|
|
SupportedLanguage.ChineseTraditional,
|
|
SupportedLanguage.ChineseSimplified,
|
|
SupportedLanguage.Korean,
|
|
SupportedLanguage.Alingual
|
|
];
|
|
|
|
protected override DateOnly? GetEstimatedReleaseDate(string expectedDate)
|
|
{
|
|
if (expectedDate.Contains("販売中") || expectedDate.Contains("発売予定未定"))
|
|
return null;
|
|
|
|
Regex textRegex = EstimatedDateRegex();
|
|
MatchCollection textMatches = textRegex.Matches(expectedDate);
|
|
|
|
if (textMatches.Count == 0 || textMatches[0].Groups.Count < 4)
|
|
return null;
|
|
|
|
int releaseYear = Convert.ToInt32(textMatches[0].Groups[1].Value);
|
|
int releaseMonth = Convert.ToInt32(textMatches[0].Groups[2].Value);
|
|
int releaseDay = 1;
|
|
|
|
string releaseTime = textMatches[0].Groups[3].Value;
|
|
|
|
switch (releaseTime)
|
|
{
|
|
case "上旬発売予定":
|
|
case "上旬 発売予定":
|
|
releaseDay = 1;
|
|
break;
|
|
case "中旬発売予定":
|
|
case "中旬 発売予定":
|
|
releaseDay = 11;
|
|
break;
|
|
case "下旬発売予定":
|
|
case "下旬 発売予定":
|
|
releaseDay = 21;
|
|
break;
|
|
}
|
|
|
|
return new DateOnly(releaseYear, releaseMonth, releaseDay);
|
|
}
|
|
|
|
protected override DateOnly? GetSalesDate(string salesDate)
|
|
{
|
|
Regex textRegex = SalesDateRegex();
|
|
MatchCollection textMatches = textRegex.Matches(salesDate);
|
|
|
|
if (textMatches.Count == 0 || textMatches[0].Groups.Count < 4)
|
|
return null;
|
|
|
|
int releaseYear = Convert.ToInt32(textMatches[0].Groups[1].Value);
|
|
int releaseMonth = Convert.ToInt32(textMatches[0].Groups[2].Value);
|
|
int releaseDay = Convert.ToInt32(textMatches[0].Groups[3].Value);
|
|
|
|
return new DateOnly(releaseYear, releaseMonth, releaseDay);
|
|
}
|
|
} |