private static ExportItem CreateExportItem( ProductModel model, ProductStyle style, IEnumerable<string> additionalDirs, string imagesPath, float priceMultiple, float priceAdd) { ExportItem prod = new ExportItem(); prod.Sku = style.Sku; prod.Name = model.Name; prod.Description = model.Description; prod.Price = BuildPrice(style.DiscountPrice, priceMultiple, priceAdd); if (style.DiscountPrice < style.Price) { prod.OldPrice = BuildPrice(style.Price, priceMultiple, priceAdd); } // we use a single size list for all styles in a model, so I create the list in the caller function //prod.Size = BuildSize(style.Sizes.ToArray()); prod.MoreCategories = string.Join<string>(",", additionalDirs); prod.SizeChartType = model.GenderAge; int imageCount = 0; foreach (ProductImage pi in style.Images.FindAll(p => p.Downloaded)) { string pathSource = Path.Combine(Constants.DownloadsDir, pi.Name + ".jpg"); if (File.Exists(pathSource)) { if (imageCount == 10) break; // up to 10 images ThumbnailInfo tiInfo = new ThumbnailInfo() { Name = pi.Name + "_info.jpg", Width = 300, Height = 300 }; ThumbnailInfo tiThumbnail = new ThumbnailInfo() { Name = pi.Name + "_th.jpg", Width = 150, Height = 150 }; ThumbnailInfo tiLarge = new ThumbnailInfo() { Name = pi.Name + "_large.jpg", Width = 1000, Height = 1000 }; ThumbnailInfo[] thumbnails = new ThumbnailInfo[] { tiInfo, tiThumbnail, tiLarge }; if (MakeJpegThumbnails(pathSource, imagesPath, thumbnails)) { prod.SetPhoto(imageCount++, tiInfo.Name + "," + tiThumbnail.Name + "," + tiLarge.Name); } } } return prod; }
public void Process() { // download a the main page string url = String.Format("http://www.champssports.com/product/model:{0}/sku:{1}/", Number, initialSku); Console.WriteLine("Downloading a model: " + url); string mainPage = Web.DownloadString(url, 5); if (String.IsNullOrEmpty(mainPage)) { Status = ModelStatus.Failed; return; } Console.WriteLine("Parsing data..."); string rawModel = RX.ExtractModelInfo(mainPage); string rawStyles = RX.ExtractStylesInfo(mainPage); jsModel = JsonConvert.DeserializeObject<JsModel>(rawModel); Dictionary<string, JArray> jStyles = JsonConvert.DeserializeObject<Dictionary<string, JArray>>(rawStyles); foreach (string sku in jsModel.ALLSKUS) { JArray rawStyle = jStyles[sku]; ProductStyle stl = new ProductStyle(sku, rawStyle); Styles.Add(stl); } Parallel.ForEach(Styles, _ => { _.Process(); }); Status = ModelStatus.Processed; }