public override List<IThreadedWebClientJob> Execute() { CQ dom = this.GetHtml(); Sofa sofa = new Sofa(); sofa.Url = this.GetUrl(); sofa.Id = dom.Find("#pid").Attr("value"); var price = dom.Find("em.product__price-now--amount").Text().Replace("£", "").Replace(",", ""); double parsedPrice; if(double.TryParse(price, out parsedPrice)) { sofa.Price = parsedPrice; } sofa.Name = dom.Find("h1[itemprop=\"name\"]").Text(); StringBuilder builder = new StringBuilder(); foreach(var d in dom.Find(".product-information__bd").Find("p").Select(x => x.Cq().Text().Trim())) { builder.AppendLine(d); } foreach (var d in dom.Find(".product-information__bd").Find("li").Select(x => x.Cq().Text().Trim())) { builder.AppendLine(" * " + d); } sofa.Desc = builder.ToString(); // Images foreach(var i in dom.Find(".product-gallery__grid").Find("img")) { sofa.Images.Add(i.Cq().Attr("src")); } // Size sofa.MesurmentImage = dom.Find("img.size-guide__img").Attr("src"); foreach(var s in dom.Find(".size-guide__table").Find("tr").Select(x=>x.Cq().Find("td").Select(y=>y.Cq().Text()).ToList())) { if(s.Count >= 2) { sofa.Mesurments.Add(s[0], s[1]); } } // Fabricts foreach(var f in dom.Find("#swatches").Find("a.product-swatches__item").Select(x => x.Cq())) { Fabricts fab = new Fabricts(); fab.Image = f.Find("img").Attr("src"); fab.Name = f.Find("b.product-swatches__category").Text().Trim(); fab.Url = "http://www.scs.co.uk" + f.Attr("data-url"); sofa.Fabricts.Add(fab); } holder.Add(sofa); return this.ReturnNothing(); }
public override List<IThreadedWebClientJob> Execute() { CQ dom = this.GetHtml(); var body = dom.Find(".Body_pnlContent"); Sofa sofa = new Sofa(); sofa.Url = this.GetUrl(); sofa.Category = this.category; sofa.Name = dom.Find("h1").First().Text().Trim(); sofa.Desc = dom.Find(".tabContent").First().Text().Trim(); sofa.Desc = RegexHelper.Replace(@"([ ]+)", " ", sofa.Desc); sofa.Desc = RegexHelper.Replace(@"([\n]+)", "\n", sofa.Desc); var priceText = dom.Find("[itemprop=\"price\"]").Last().Text(); double price; if (double.TryParse(priceText, out price)) { sofa.Price = price; } // Images foreach (var img in dom.Find(".horzonProductCarousel").Find("img").Select(x=>x.Cq())) { sofa.Images.Add(img.Attr("src").Split('?').First()); } // Fabricts var fabricts = dom.Find(".colorOptionContainer").Find("dd").Find("a").Select(x => x.Cq()); foreach (var fabrict in fabricts) { var img = fabrict.Find("img"); Fabricts fab = new Fabricts(); fab.Url = "http://www.furniturevillage.co.uk" + fabrict.Attr("href"); fab.Name = img.Attr("alt"); fab.Image = img.Attr("src").Split('?').First(); sofa.Fabricts.Add(fab); } // Mesurement foreach (var dd in dom.Find(".dimensionsLeft").Find("dd").Select(x=>x.Cq())) { var inner = dd[0].InnerText.Trim(); var value = dd.Find("b").Text().Trim(); sofa.Mesurments.Add(inner, value); } this.holder.Add(sofa); return this.ReturnNothing(); }
public override List<IThreadedWebClientJob> Execute() { var newJobs = new List<IThreadedWebClientJob>(); var products = RegexHelper.MatchAll(@"Products\[(.*?);", this.GetHtml()); foreach (var product in products) { try { string imageTemplate = "http://steinhoffukretailltd.scene7.com/is/image/SteinhoffUKRetailLtd/{0}_{1}_{2}_IS_0"; var id = RegexHelper.Match(@"(\d+)\'\]\s+=", product); var jsonText = RegexHelper.Match(@"\d+\'\]\s+=(.+);;", product + ";;"); var json = JsonConvert.DeserializeObject<dynamic>(jsonText); string sku = json.sku; foreach (var _variant in json.variants) { var variant = _variant.First; Sofa sofa = new Sofa(); sofa.Id = id; sofa.Url = this.GetUrl(); sofa.Name = variant.gtm["data-gtm-product-name"]; sofa.Category = variant.gtm["data-gtm-product-category"]; sofa.Brand = variant.gtm["data-gtm-product-brand"]; double price; if (double.TryParse(variant.prices.price.value.ToString(), out price)) { sofa.Price = price; } string default_trim = variant.default_trim; string default_color = variant.default_cover_colour; sofa.Images.Add(string.Format(imageTemplate, sku, default_color, default_trim)); foreach (var _color in variant.cover_colours) { var color = _color.First; Fabricts fab = new Fabricts(); fab.Name = color.description; fab.Fabric = color.fabric; fab.Image = string.Format(imageTemplate, sku, color.code, default_trim); sofa.Fabricts.Add(fab); } newJobs.Add(new HarveysFurnitureSofaGetDetails(this.sofaHolder, sofa, variant.variant_id.ToString(), id)); } } catch (Exception exp) { logger.Error("Collection product failed.", exp); } } return newJobs; }