/// <summary> /// Retrieve a Seiyuu from MAL /// </summary> /// <param name="seiyuuId"></param> /// <returns></returns> public async Task <RetrievalWrapper <Seiyuu> > DoSeiyuuRetrieval(int seiyuuId) { var seiyuu = new Seiyuu { Id = seiyuuId }; try { var seiyuuResponse = await _pageRetriever.RetrieveHtmlPageAsync(MalRouteBuilder.SeiyuuUrl(seiyuuId)); if (seiyuuResponse.ResponseStatusCode == null) { throw seiyuuResponse.Exception; } var seiyuuDoc = seiyuuResponse.Document; seiyuu .RetrieveName(seiyuuDoc) .RetrieveGivenName(seiyuuDoc) .RetrieveFamilyName(seiyuuDoc) .RetrieveBirthday(seiyuuDoc) .RetrieveAdditionalInformation(seiyuuDoc) .RetrieveWebsite(seiyuuDoc) .RetrieveRoles(seiyuuDoc); return(new RetrievalWrapper <Seiyuu>(seiyuuResponse.ResponseStatusCode.Value, seiyuuResponse.Success, seiyuu)); } catch (Exception exception) { seiyuu.ErrorOccured = true; seiyuu.ErrorMessage = exception.Message; return(new RetrievalWrapper <Seiyuu>(exception, seiyuu)); } }
public static SeiyuuTableEntry ToSeiyuuTableEntry(this Seiyuu seiyuu) => new SeiyuuTableEntry( seiyuu.MalId, seiyuu.Name, seiyuu.ImageUrl, MalPersonBaseUrl + seiyuu.MalId );
private async Task UpdateSeiyuu(Seiyuu seiyuu, Person seiyuuParsedData) { string japaneseName = string.Empty; seiyuu.Name = seiyuuParsedData.Name; seiyuu.Popularity = seiyuuParsedData.MemberFavorites; seiyuu.About = seiyuuParsedData.More; if (seiyuuParsedData.Birthday.HasValue) { seiyuu.Birthday = seiyuuParsedData.Birthday.Value.ToString("dd-MM-yyyy"); } seiyuu.ImageUrl = EmptyStringIfPlaceholder(seiyuuParsedData.ImageURL); if (!string.IsNullOrWhiteSpace(seiyuuParsedData.FamilyName)) { japaneseName += seiyuuParsedData.FamilyName; } if (!string.IsNullOrWhiteSpace(seiyuuParsedData.GivenName)) { japaneseName += string.IsNullOrEmpty(japaneseName) ? seiyuuParsedData.GivenName : " " + seiyuuParsedData.GivenName; } seiyuu.JapaneseName = japaneseName; seiyuuRepository.Update(seiyuu); await seiyuuRepository.CommitAsync(); }
public SeiyuuComparisonSubEntry(AnimeCharacter character, Seiyuu seiyuu) { Seiyuu = seiyuu; Characters = new List <AnimeCharacter> { character }; }
private void UpdatePerson(Seiyuu seiyuuToUpdate, MalSeiyuuUpdateData updateData) { seiyuuToUpdate.Name = updateData.Name; seiyuuToUpdate.About = updateData.About; seiyuuToUpdate.KanjiName = updateData.JapaneseName; seiyuuToUpdate.ImageUrl = updateData.ImageUrl; seiyuuToUpdate.Popularity = updateData.Popularity; seiyuuToUpdate.Birthday = updateData.Birthday; }
/// <summary> /// Retrieve Seiyuu's name /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveName(this Seiyuu seiyuu, HtmlDocument doc) { seiyuu.Name = doc.DocumentNode .SelectNodes("//meta") .FirstOrDefault(x => x.Attributes["property"]?.Value == "og:title") ?.Attributes["content"] ?.Value; return(seiyuu); }
public static SeiyuuCardDto ToSeiyuuCardDto(this Seiyuu seiyuu) => seiyuu == null ? null : new SeiyuuCardDto( seiyuu.MalId, seiyuu.Name, seiyuu.ImageUrl, seiyuu.KanjiName, seiyuu.Birthday, seiyuu.About );
public SeiyuuComparisonEntry(Anime anime, AnimeCharacter character, Seiyuu seiyuu) { Anime = new List <Anime> { anime }; SeiyuuCharacters = new List <SeiyuuComparisonSubEntry> { new SeiyuuComparisonSubEntry(character, seiyuu) }; }
/// <summary> /// Retrieve Seiyuu's given name /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveGivenName(this Seiyuu seiyuu, HtmlDocument doc) { seiyuu.GivenName = doc .DocumentNode .SelectNodes("//div") .FirstOrDefault(x => x.FirstChild?.Name == "span" && x.FirstChild?.InnerText == "Given name:") ?.ChildNodes["#text"] ?.InnerText .Trim(); return(seiyuu); }
/// <summary> /// Retrieve Seiyuu's family name /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveFamilyName(this Seiyuu seiyuu, HtmlDocument doc) { seiyuu.FamilyName = doc .DocumentNode .SelectNodes("//span") .FirstOrDefault(x => x.InnerText == "Family name:") ?.NextSibling ?.InnerText .Trim(); return(seiyuu); }
public SeiyuuPageScraperExtensionsFixture() { Document = new HtmlDocument(); var path = AppDomain.CurrentDomain.BaseDirectory; var examplePath = Path.Combine(path, "PageExamples", "40.html"); using (var htmlFile = File.Open(examplePath, FileMode.Open)) { Document.Load(htmlFile); } Instance = new Seiyuu(); }
/// <summary> /// Retrieve Seiyuu's website /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveWebsite(this Seiyuu seiyuu, HtmlDocument doc) { seiyuu.Website = doc .DocumentNode .SelectNodes("//span") .FirstOrDefault(x => x.InnerText == "Website:") ?.NextSibling ?.NextSibling ?.Attributes["href"] .Value; return(seiyuu); }
/// <summary> /// Retrieve Seiyuu information under the more heading /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveAdditionalInformation(this Seiyuu seiyuu, HtmlDocument doc) { var node = doc .DocumentNode .SelectNodes("//div") .FirstOrDefault(x => x.Attributes["class"]?.Value.Contains("people-informantion-more") ?? false) ?.InnerText; var info = node?.Split("\r\n".ToCharArray()).ToList() ?? new List <string>(); var sb = new StringBuilder(); foreach (var entry in info) { if (entry == "") { continue; } if (entry.EndsWith(":")) { var currentList = sb.ToString().TrimEnd(','); sb.Clear(); if (!string.IsNullOrEmpty(currentList)) { seiyuu.More.Add(currentList); } sb.Append($"{entry} "); } else if (entry.Contains(":")) { seiyuu.More.Add(entry); } else { sb.Append($"{entry},"); } } if (!string.IsNullOrEmpty(sb.ToString())) { seiyuu.More.Add(sb.ToString().TrimEnd(',')); } return(seiyuu); }
private async Task InsertSeiyuuAsync(UpdateSeiyuuMessage updateSeiyuuMessage, MalSeiyuuUpdateData updateData) { var newSeiyuu = new Seiyuu { Id = updateSeiyuuMessage.Id, MalId = updateSeiyuuMessage.MalId, Name = updateData.Name, About = updateData.About, KanjiName = updateData.JapaneseName, ImageUrl = updateData.ImageUrl, Popularity = updateData.Popularity, Birthday = updateData.Birthday, }; Console.WriteLine($"Inserted seiyuu with malId {updateSeiyuuMessage.MalId} ({updateData.Name})"); await _seiyuuRepository.AddAsync(newSeiyuu); }
/// <summary> /// Retrieve Seiyuu's birthday /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveBirthday(this Seiyuu seiyuu, HtmlDocument doc) { var stringBirthday = doc .DocumentNode .SelectNodes("//div") .FirstOrDefault(x => x.FirstChild?.Name == "span" && x.FirstChild?.InnerText == "Birthday:") ?.ChildNodes["#text"] ?.InnerText .Trim(); DateTime bday; if (DateTime.TryParse(stringBirthday, out bday)) { seiyuu.BirthDay = bday; } return(seiyuu); }
/// <summary> /// Retrieve the Seiyuu's roles /// </summary> /// <param name="seiyuu">Seiyuu instance to populate</param> /// <param name="doc">Html document from which data should be pulled</param> /// <returns>Seiyuu instance</returns> public static Seiyuu RetrieveRoles(this Seiyuu seiyuu, HtmlDocument doc) { var rows = doc.DocumentNode .SelectNodes("//table")[1] .ChildNodes .Where(x => x.Name == "tr"); foreach (var row in rows) { var cells = row.ChildNodes .Where(x => x.Name == "td") .ToList(); var role = CreateRoleAndPopulateWithAnimeInformation(cells) .PopulateRoleWithCharacterInformation(cells); seiyuu.Roles.Add(role); } return(seiyuu); }
public SeasonSummaryEntryBuilder WithSeiyuu(Seiyuu seiyuu) { _seiyuu = seiyuu; return(this); }
public static SeiyuuSearchEntryDto ToSeiyuuSearchEntryDto(this Seiyuu seiyuu) => new SeiyuuSearchEntryDto(seiyuu.MalId, seiyuu.Name, seiyuu.ImageUrl);
public async Task AddAsync(Seiyuu seiyuu) { await _dbContext.Seiyuus.AddAsync(seiyuu); await _dbContext.SaveChangesAsync(); }
public AnimeRoleBuilder WithSeiyuu(Seiyuu seiyuu) { _seiyuu = seiyuu; return(this); }
public async Task UpdateAsync(Seiyuu seiyuu) { seiyuu.ModificationDate = DateTime.UtcNow; _dbContext.Update(seiyuu); await _dbContext.SaveChangesAsync(); }
public SeiyuuComparisonSubEntryBuilder WithSeiyuu(Seiyuu seiyuu) { _seiyuu = seiyuu; return(this); }
public AnimeComparisonEntryBuilder WithSeiyuu(Seiyuu seiyuu) { _seiyuu = seiyuu; return(this); }