Пример #1
0
        /// <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));
            }
        }
Пример #2
0
 public static SeiyuuTableEntry ToSeiyuuTableEntry(this Seiyuu seiyuu)
 => new SeiyuuTableEntry(
     seiyuu.MalId,
     seiyuu.Name,
     seiyuu.ImageUrl,
     MalPersonBaseUrl + seiyuu.MalId
     );
Пример #3
0
        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();
        }
Пример #4
0
 public SeiyuuComparisonSubEntry(AnimeCharacter character, Seiyuu seiyuu)
 {
     Seiyuu     = seiyuu;
     Characters = new List <AnimeCharacter>
     {
         character
     };
 }
Пример #5
0
 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);
        }
Пример #7
0
 public static SeiyuuCardDto ToSeiyuuCardDto(this Seiyuu seiyuu) => seiyuu == null
                 ? null
                 : new SeiyuuCardDto(
     seiyuu.MalId,
     seiyuu.Name,
     seiyuu.ImageUrl,
     seiyuu.KanjiName,
     seiyuu.Birthday,
     seiyuu.About
     );
Пример #8
0
 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);
        }
Пример #11
0
            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);
        }
Пример #14
0
        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);
 }
Пример #18
0
 public static SeiyuuSearchEntryDto ToSeiyuuSearchEntryDto(this Seiyuu seiyuu)
 => new SeiyuuSearchEntryDto(seiyuu.MalId, seiyuu.Name, seiyuu.ImageUrl);
Пример #19
0
        public async Task AddAsync(Seiyuu seiyuu)
        {
            await _dbContext.Seiyuus.AddAsync(seiyuu);

            await _dbContext.SaveChangesAsync();
        }
Пример #20
0
 public AnimeRoleBuilder WithSeiyuu(Seiyuu seiyuu)
 {
     _seiyuu = seiyuu;
     return(this);
 }
Пример #21
0
 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);
 }