Beispiel #1
0
 private static BoosterPackCard ToModel(this BoosterPackCardEntity entity)
 {
     return(new BoosterPackCard
     {
         Name = entity.Name,
         Rarities = entity.Rarities
     });
 }
Beispiel #2
0
    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)
        });
    }