private static BoosterPackCard ToModel(this BoosterPackCardEntity entity) { return(new BoosterPackCard { Name = entity.Name, Rarities = entity.Rarities }); }
public async Task <BoosterPackEntity> Parse() { var url = string.Format(ConstantString.MediaWikiParseIdUrl, _id); var dom = await GetDom(url); var parserOutput = dom.GetElementByClassName("mw-parser-output"); var dates = GetReleaseDates(parserOutput); 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 <BoosterPackCardEntity>(); foreach (var row in cardTable) { var name = TrimName(row.Children[nameIndex].TextContent.Trim().Trim('"')); var rarities = new List <string>(); if (rarityIndex != -1) { rarities = row .Children[rarityIndex] .Children.Select(element => element.TextContent.Trim()) .Where(text => !string.IsNullOrEmpty(text)) .ToList(); } var card = new BoosterPackCardEntity { Name = name, Rarities = rarities }; cards.Add(card); } return(new BoosterPackEntity { Id = int.Parse(_id), Name = _name, Dates = dates, Cards = cards, Url = string.Format(ConstantString.YugipediaUrl + ConstantString.MediaWikiIdUrl, _id) }); }