コード例 #1
0
        public override BoosterPack Parse(HttpClient httpClient)
        {
            var html     = GetHtml(httpClient);
            var response = ScraperConstants.HtmlParser.ParseDocument(html);
            var dom      = response.GetElementsByClassName("mw-parser-output").First();
            var dates    = GetReleaseDates(dom);
            var table    = dom.GetElementsByClassName("card-list").FirstOrDefault()?.FirstElementChild.Children;

            if (table is null)
            {
                throw new NullReferenceException($"No card list exists for {Name}");
            }

            var tableHead   = table.First();
            var nameIndex   = GetColumnIndex(tableHead, "name");
            var rarityIndex = GetColumnIndex(tableHead, "rarity");
            var cardTable   = table.Skip(1);
            var cards       = new List <BoosterPackCard>();

            foreach (var row in cardTable)
            {
                var name     = TrimName(row.Children[nameIndex].TextContent.Trim().Trim('"'));
                var rarities = rarityIndex == -1 ? null : row.Children[rarityIndex].Children.Select(element => element.TextContent.Trim()).Where(IsNotNullOrEmpty);
                var card     = new BoosterPackCard {
                    Name = name, Rarities = rarities
                };

                cards.Add(card);
            }

            return(new BoosterPack()
            {
                Name = Name,
                Dates = dates is null ? null : JsonConvert.SerializeObject(dates),
                Cards = JsonConvert.SerializeObject(cards),
                Url = Url
            });
コード例 #2
0
        public override BoosterPack Parse(HttpClient httpClient)
        {
            var dom   = GetDom(httpClient);
            var dates = dom.GetElementByClassName("portable-infobox")?
                        .GetElementsByTagName("section")
                        .FirstOrDefault(element => element.FirstElementChild.TextContent.Contains("release date", StringComparison.OrdinalIgnoreCase))?
                        .GetElementsByClassName("pi-data")
                        .ToDictionary(element => element.FirstElementChild.TextContent.Trim(), element => element.LastElementChild.TextContent.Trim());
            var table       = dom.GetElementByClassName("card-list") ?? dom.GetElementByClassName("wikitable");
            var tableHead   = table.ClassList.Contains("card-list") ? table.GetElementsByTagName("tbody").FirstOrDefault().FirstElementChild : table.GetElementsByTagName("tbody").FirstOrDefault().Children[1];
            var nameIndex   = GetColumnIndex(tableHead, "name");
            var rarityIndex = GetColumnIndex(tableHead, "rarity");
            var cardTable   = table.ClassList.Contains("card-list") ? table.GetElementsByTagName("tbody").FirstOrDefault().Children.Skip(1) : table.GetElementsByTagName("tbody").FirstOrDefault().Children.Skip(2);
            var cards       = new List <BoosterPackCard>();

            foreach (var cardRow in cardTable)
            {
                var name     = TrimName(cardRow.Children[nameIndex].TextContent);
                var rarities = rarityIndex == -1 ? null : cardRow.Children[rarityIndex].Children.Select(element => element.TextContent.Trim()).Where(IsNotNullOrEmpty);
                var card     = new BoosterPackCard {
                    Name = name, Rarities = rarities
                };

                cards.Add(card);
            }

            var boosterPack = new BoosterPack()
            {
                Name  = Name,
                Dates = dates is null ? null : JsonConvert.SerializeObject(dates),
                Cards = JsonConvert.SerializeObject(cards),
                Url   = Url
            };

            return(boosterPack);
        }