Example #1
0
        public static WebToon MapReadModelToEntity(WebToonReadModel webToon)
        {
            var web = new WebToon
            {
                Uri         = webToon.Uri,
                TitleNo     = webToon.TitleNo,
                Subject     = webToon.Subject,
                Author      = webToon.Author,
                Genre       = webToon.Genre,
                ImageLink   = webToon.ImageLink,
                ContentHash = webToon.ContentHash,
                Updated     = webToon.Updated
            };

            return(web);
        }
Example #2
0
        public async Task ProcessPageContent(IHtmlDocument document, Uri requestUri)
        {
            var uri = requestUri.ToString();

            if (uri == "https://www.webtoons.com/en/dailySchedule")
            {
                var comicCards = document.QuerySelectorAll(".daily_card_item");

                foreach (var comicCard in comicCards)
                {
                    var link    = comicCard.GetAttribute("href");
                    var webToon = new WebToon
                    {
                        Author      = comicCard.QuerySelector(".author").InnerHtml,
                        ContentHash = "",
                        Genre       = comicCard.QuerySelector(".genre").InnerHtml,
                        ImageLink   = new Uri(comicCard.QuerySelector("img").GetAttribute("src")).PathAndQuery,
                        Subject     = comicCard.QuerySelector(".subj").InnerHtml,
                        TitleNo     = HttpUtility.ParseQueryString(new Uri(link).Query).Get("title_no"),
                        Updated     = DateTime.UtcNow.ToString(Tools.StrDateTimeFormat),
                        Uri         = comicCard.GetAttribute("href")
                    };
                    var existingWeb = await _context.WebToons.FindAsync(webToon.TitleNo);

                    if (existingWeb != null)
                    {
                        continue;
                    }
                    await _context.WebToons.AddAsync(webToon);
                }
            }
            else if (uri.Contains("/list?title_no"))
            {
                var list = document.QuerySelectorAll("#_listUl li");
                Console.WriteLine(list.Length);
                foreach (var item in list)
                {
                    var episode = new Episode
                    {
                        ContentHash      = "",
                        EpisodeDate      = item.QuerySelector("a .date").InnerHtml,
                        EpisodeLink      = item.QuerySelector("a").GetAttribute("href"),
                        EpisodeName      = item.QuerySelector("a .subj").InnerHtml,
                        EpisodeThumbnail = new Uri(item.QuerySelector("a .thmb img").GetAttribute("src")).PathAndQuery,
                        TitleNo          = HttpUtility.ParseQueryString(requestUri.Query).Get("title_no"),
                        Updated          = DateTime.UtcNow.ToString(Tools.StrDateTimeFormat)
                    };
                    episode.EpisodeLinkHash = Tools.ComputeSha256Hash(episode.EpisodeLink);

                    var existed = await _context.Episodes.FindAsync(episode.EpisodeLinkHash);

                    if (existed != null)
                    {
                        continue;
                    }
                    await _context.AddAsync(episode);
                }
            }
            else if (uri.Contains("viewer"))
            {
                var content      = document.QuerySelectorAll(".viewer_img img");
                var contentLinks = content
                                   .Where(cont => cont.GetAttribute("data-url") != null)
                                   .Select(cont => new Uri(cont.GetAttribute("data-url"))
                                           .PathAndQuery).ToList();

                var page = new Page
                {
                    Content     = JsonSerializer.Serialize(contentLinks),
                    EpisodeLink = uri,
                    Updated     = DateTime.UtcNow.ToString(Tools.StrDateTimeFormat)
                };
                page.EpisodeLinkHash = Tools.ComputeSha256Hash(page.EpisodeLink);

                var existingPage = _context.Pages.Where(p => p.Content == page.Content).ToList();
                if (existingPage.Count == 0)
                {
                    await _context.AddAsync(page);
                }
            }

            await _context.SaveChangesAsync();
        }