예제 #1
0
        private void AddDbSneaker(DbRoot db, Listing listing, RootParsingObject shop, Shop shopCatalogItem)
        {
            log += "Add Sneaker. sku:" + listing.sku + " Title:" + listing.title + br;
            var sneaker = new DbSneaker();

            sneaker.Id    = db.Sneakers.Count + 1;
            sneaker.Brand = listing.brand;
            sneaker.Sku   = listing.sku;
            sneaker.Titles.Add(listing.title);
            sneaker.Color    = listing.colorbrand;
            sneaker.Category = listing.category;
            sneaker.Links.Add(listing.url);
            if (listing.images.Count > 0)
            {
                var imageCollection = new DbImageCollection();
                imageCollection.ShopName = shop.market_info.name;
                foreach (var image in listing.images)
                {
                    var dbimg = new DbImage();
                    dbimg.SiteUrl = image;
                    imageCollection.Images.Add(dbimg);
                }
                //imageCollection.Images = listing.images;
                //todo менять ссылки из магазины на ссылки с нашего сервака
                //todo качать фотки в момент парсинга
                sneaker.ImageCollectionList.Add(imageCollection);
            }
            foreach (var size in listing.sizes)
            {
                var dbSize = GetDbSize(sneaker, size, listing, shop, shopCatalogItem);
                sneaker.Sizes.Add(dbSize);
            }
            db.Sneakers.Add(sneaker);
        }
예제 #2
0
        private void UpdateDbSneaker(DbRoot db, DbSneaker sneaker, Listing listing, RootParsingObject shop, Shop shopCatalogItem)
        {
            log += "Update Sneaker. sku:" + sneaker.Sku + " title: " + sneaker.Titles[0] + br;

            /* логика:
             * проверяем заголовок, если длиннее, берем его
             * проверяем остальные элементы, если они не нул, а были нул то берем их
             * сравниваем категорию листинга и кроссовка, если не совпадают то отклоняем этот листинг (но по идее такого быть не должно
             */

            //title
            var title = sneaker.Titles.Find(x => x.ToLower() == listing.title.ToLower());

            if (title == null)
            {
                sneaker.Titles.Add(listing.title);
                sneaker.Titles = sneaker.Titles.OrderByDescending(x => x.Length).ToList();
            }

            //color
            if (!string.IsNullOrWhiteSpace(listing.colorbrand))
            {
                if (listing.colorbrand.Length > sneaker.Color.Length)
                {
                    sneaker.Color = listing.colorbrand;
                }
            }

            //category
            //если пустая то добавляем
            if (string.IsNullOrWhiteSpace(sneaker.Category) && !string.IsNullOrWhiteSpace(listing.category))
            {
                sneaker.Category = listing.category;
            }
            //если обе непустые сраванием
            else if (!string.IsNullOrWhiteSpace(sneaker.Category) && !string.IsNullOrWhiteSpace(listing.category))
            {
                if (sneaker.Category != listing.category)
                {
                    log += "Warn! Other categories. sku: " + sneaker.Sku + " sneaker.Category:" + sneaker.Category +
                           " listing.category:" + listing.category + " listing.url: " + listing.url + br;
                }
            }
            //если обе пустые то
            else if (string.IsNullOrWhiteSpace(sneaker.Category) && string.IsNullOrWhiteSpace(listing.category))
            {
                log += "Warn: category is empty" + br;
            }

            //links
            sneaker.Links.Add(listing.url);

            //images
            var imgCol = new DbImageCollection();

            imgCol.ShopName = shopCatalogItem.name;
            foreach (var lImage in listing.images)
            {
                var dbImg = new DbImage();
                dbImg.SiteUrl = lImage;
                imgCol.Images.Add(dbImg);
            }
            sneaker.ImageCollectionList.Add(imgCol);

            //sizes
            foreach (var lSize in listing.sizes)
            {
                //find size
                var snSize = new DbSize();
                if (!string.IsNullOrWhiteSpace(lSize.us))
                {
                    snSize = sneaker.Sizes.Find(x => x.Us == lSize.us);
                    //если размера нет, создаем
                    if (snSize == null)
                    {
                        var dbSize = GetDbSize(sneaker, lSize, listing, shop, shopCatalogItem);
                        sneaker.Sizes.Add(dbSize);
                    }
                    //если есть создаем только оффер
                    else
                    {
                        var offer = CreateDbOffer(sneaker, lSize, listing, shop, shopCatalogItem);
                        snSize.Offers.Add(offer);
                        snSize.Offers = snSize.Offers.OrderBy(x => x.price_usd_with_delivery_to_usa_and_minus_vat)
                                        .ToList();
                    }
                }
                else
                {
                    //если юс размера нет, то надо добисать будет код (например для асфальтгольда)
                    throw new Exception("size us is null. Cannot update db sneaker.");
                }
            }
        }