private OrthoProduct GetProduct(string path, string name, WebClient wc) { System.Console.Write(name); OrthoProduct product = new OrthoProduct(); HtmlDocument doc = GetPage(path, wc); HtmlNode node; node = doc.DocumentNode.SelectSingleNode("//meta[@property='og:image']"); product.ImageUrl = node.Attributes["content"].Value; product.Name = name; product.BriefDescription = doc.DocumentNode.SelectSingleNode("//p[@id='pShortDesc']")?.OuterHtml.Trim(); node = doc.DocumentNode.SelectSingleNode("//h3[contains(., 'OVERVIEW')]/.."); node?.RemoveChild(node.FirstChild); product.Description = node?.InnerHtml.Trim(); node = doc.DocumentNode.SelectSingleNode("//h3[contains(., 'CLINICAL APPLICATIONS')]/.."); node?.RemoveChild(node.FirstChild); product.Benefits = node?.InnerHtml.Trim(); HtmlNode nc = doc.DocumentNode.SelectSingleNode("//script[contains(., 'IdevSelections(')]"); if (nc != null) { OrthoProduct.Option op = new OrthoProduct.Option { variantTypeName = "Size" }; string json = nc.InnerText; json = json.Substring(json.IndexOf('{')); json = json.Substring(0, json.LastIndexOf('}') + 1); Example ex = JsonConvert.DeserializeObject <Example>(json); if (ex.Classifications.Count == 0) { HtmlNodeCollection nc2 = doc.DocumentNode.SelectNodes("//span[@class='bottleSize']"); if (nc2 != null) { foreach (HtmlNode n2 in nc2) { op.values.Add(n2.InnerText.Trim()); } } else { System.Console.Write(" Error"); } } if (ex.Classifications.Count > 1) { System.Console.Write(" Error2"); } foreach (Classification c in ex.Classifications) { foreach (S s in c.s) { op.values.Add(s.s); } } product.Options.Add(op); } else { System.Console.Write(" Error3"); } foreach (OrthoProduct.Option vt in product.Options) { foreach (string value in vt.values) { OrthoProduct.Variant v = new OrthoProduct.Variant { Option1 = value }; product.Variants.Add(v); } } if (product.Variants.Count == 1) { product.Variants[0].ImageUrl = product.ImageUrl; } System.Console.WriteLine(" - Complete"); return(product); }
public async Task Supplement2() { List <InvSupplement> inv2 = JsonConvert.DeserializeObject <List <InvSupplement> >(File.ReadAllText(supplement)); List <InvSupplement> inv = inv2.Where(i => i.Active && !i.Imported && !string.IsNullOrEmpty(i.productNumber)).ToList(); List <OrthoProduct> prods = GetProducts(); Dictionary <string, List <string> > toImport = new Dictionary <string, List <string> >(); foreach (InvSupplement i in inv) { List <OrthoProduct> p = prods.Where(xp => xp.Variants.Any(xv => xv.ProductNumber == i.productNumber)).ToList(); if (p.Count == 1) { if (toImport.ContainsKey(p[0].Name)) { if (!toImport[p[0].Name].Contains(i.productNumber)) { toImport[p[0].Name].Add(i.productNumber); } else { System.Console.WriteLine($"{i.Name} - {i.productNumber} - {i.Size} - {i.Flavor}"); } } else { toImport.Add(p[0].Name, new List <string>() { i.productNumber }); } } else { System.Console.WriteLine($"{i.Name} - {i.productNumber} - {i.Size} - {i.Flavor}"); } } foreach (KeyValuePair <string, List <string> > vp in toImport) { OrthoProduct prod = prods.FirstOrDefault(p => p.Name == vp.Key); if (prod != null) { prod.Variants.RemoveAll(v => !vp.Value.Contains(v.ProductNumber)); foreach (InvSupplement i in inv2.Where(iv => vp.Value.Contains(iv.productNumber))) { i.Imported = true; OrthoProduct.Variant v = prod.Variants.FirstOrDefault(pv => pv.ProductNumber == i.productNumber); if (v != null) { if (i.Retail == 0.00m) { } v.Price = i.Retail; } else { } } System.Console.Write($"{prod.Name} "); await BuildProduct(prod); await File.WriteAllTextAsync(supplement, JsonConvert.SerializeObject(inv2, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); System.Console.WriteLine($"completed"); } else { } } }