Exemple #1
0
        private int FindSaleId(CatalogueViewResponse viewResponse)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(viewResponse.Content);

            var weeklySpecialsCatalogueContainer = doc.DocumentNode
                                                   .Descendants("div")
                                                   .Where(node => node.HasClass("sale-container"))
                                                   .Where(node => node.GetDataAttribute("saleid") != null)
                                                   .Where(node => node.GetDataAttribute("salename")?.DeEntitizeValue.Contains(WeeklySpecialsCatalogue, StringComparison.InvariantCultureIgnoreCase) ?? false)
                                                   .FirstOrDefault();

            if (weeklySpecialsCatalogueContainer is null)
            {
                throw new UnableToFindSaleIdException($"{S["Didn't find \"{0}\" container in HTML content.", WeeklySpecialsCatalogue]}\n\n{viewResponse.Content}");
            }

            var saleIdValue = weeklySpecialsCatalogueContainer.GetDataAttribute("saleid").Value;

            if (!int.TryParse(saleIdValue, out var saleId))
            {
                throw new UnableToFindSaleIdException($"{S["Found invalid \"{0}\" attribute value \"{1}\" in HTML content.", "data-saleid", saleIdValue]}\n\n{viewResponse.Content}");
            }

            return(saleId);
        }
        private int FindSaleId(CatalogueViewResponse viewResponse)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(viewResponse.Content);

            var thisWeeksCatalogueHeader = doc.DocumentNode
                                           .Descendants("h3")
                                           .Where(node => node.HasClass("sale-name-cell"))
                                           .Where(node => HtmlEntity.DeEntitize(node.InnerText) == ThisWeeksCatalogue)
                                           .FirstOrDefault();

            if (thisWeeksCatalogueHeader is null)
            {
                throw new UnableToFindSaleIdException($"{S["Didn't find \"{0}\" cell in HTML content.", ThisWeeksCatalogue]}\n\n{viewResponse.Content}");
            }

            var parentTile = thisWeeksCatalogueHeader
                             .Ancestors("div")
                             .Where(node => node.HasClass("sf-catalogues-tile"))
                             .FirstOrDefault();

            if (parentTile is null)
            {
                throw new UnableToFindSaleIdException($"{S["Didn't find \"{0}\" parent tile in HTML content.", ThisWeeksCatalogue]}\n\n{viewResponse.Content}");
            }

            var viewLink = parentTile
                           .Descendants("a")
                           .Where(node => node.Attributes["href"] != null)
                           .Where(node => node.HasClass("sf-view-button"))
                           .FirstOrDefault();

            if (viewLink is null)
            {
                throw new UnableToFindSaleIdException($"{S["Didn't find \"{0}\" link in HTML content.", "View"]}\n\n{viewResponse.Content}");
            }

            var url = new Uri(CatalaogueBaseUri, viewLink.Attributes["href"].Value);

            foreach (var param in url.Fragment.Split('&'))
            {
                var parts = param.Split('=');

                if (parts.Length < 2)
                {
                    continue;
                }

                var name  = parts[0];
                var value = parts[1];

                if (name == "saleId")
                {
                    return(int.Parse(value, CultureInfo.InvariantCulture));
                }
            }

            throw new UnableToFindSaleIdException($"{S["Didn't find \"{0}\" parameter in \"{1}\" link in HTML content.", "saleId", "View"]}\n\n{viewResponse.Content}");
        }