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}"); }