Ejemplo n.º 1
0
        public static void ValidateAllShops()
        {
            //загружаем каталог магазинов
            var shopCatalog = ShopCatalogRoot.ReadFromFtp();

            foreach (var shop in shopCatalog.markets)
            {
                RootParsingObject market = SneakerIcon.Classes.Parsing.Model.RootParsingObject.ReadJsonMarketFromFtp(shop);
                if (market != null)
                {
                    var shopValidator = new ShopValidator();
                    shopValidator.ValidateShop(market, shopCatalog);
                }
                else
                {
                    bool test = true;
                }
            }
        }
Ejemplo n.º 2
0
        public static AllStockRoot Run()
        {
            var          jsonCatalog = ShopCatalogRoot.ReadFromFtp();
            var          fullCatalog = new FullCatalog();
            AllStockRoot allstock    = CreateAllStock(fullCatalog, jsonCatalog);

            //когда оллсток создан, нужно его прогнать и отсортировать все офферы, чтобы первым был с самой низкой ценой
            SortOffers(allstock);

            Program.Logger.Info("Артикулов в фулкаталог: " + fullCatalog.sneakers.Count);
            Program.Logger.Info("Артикулов в оллсток: " + allstock.sneakers.Count);
            Program.Logger.Info("Размеров в оллсток: " + allstock.GetCountSizes());
            Program.Logger.Info("Офферов в оллсток: " + allstock.GetCountOffers());


            //затем нужно прогнать весь оллсток и, там где нет юпс, добавить их из upcdb
            var folder = Config.GetConfig().DirectoryPathParsing + @"allstock\";

            SaveJson(allstock, "allstock.json", folder);
            return(allstock);
        }
Ejemplo n.º 3
0
 public ShopValidatorAllBrands()
 {
     ShopCatalog = ShopCatalogRoot.ReadFromFtp();
     SizeChart   = new SizeChartAllBrands();
     SizeChart.LoadSizeChartFromFtp();
 }
        /// <summary>
        /// метод обновляет принудительно все фотки в фулкаталоге на фотки из магазинов. Эти фотки берутся с нашего сервака для фоток
        /// метод проходит по всем магазинам и ищет там фотки для артикула, если они есть то загружает их.
        /// магазины отсортированы в порядке приоритета фотографи.
        /// если в магазинах нет фоток, то фотки берутся из папки для фоток, загруженных вручную
        /// </summary>
        public static void UpdateFullCatalogImages()
        {
            /*
             * Алгоритм обновления изображений:
             * берем фулкаталог
             * берем список магазинов
             * берем только магазины без водяных знаков
             * желательно чтобы кроссовки были на белом фоне (или на сером, но не стайловые),
             * стайловые можно в конце добавить. потом опять пройтись по всем магазам и в конец добавить стайловых фоток.
             * чтобы у кросса например было 4 обычных фотки и потом стайловые дальше шли
             * также можно сделать приоритет по направлению первого кроссовка
             * например чтобы в первую очередь брать фотки кросс у которых влево смотрит)
             * Если нигде кросс не найден, то искать фотки в папке images
             * туда типа вручную фотки загружаем, например для кроссовок из дисконта
             */

            var fullCatalog = LoadFullCatalogFromFtp();
            var shopCatalog = ShopCatalogRoot.ReadFromFtp();
            var shops       = new List <RootParsingObject>();
            var startTime   = DateTime.Now;

            //очищаем левые фотки
            foreach (var record in fullCatalog.records)
            {
                if (record.images.Count == 1 && string.IsNullOrWhiteSpace(record.images[0]))
                {
                    record.images = new List <string>();
                }
            }

            Program.Logger.Info("Старт. Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);

            //подгружаем json всех магазинов
            foreach (var market in shopCatalog.markets)
            {
                var shop = RootParsingObject.ReadJsonMarketFromFtp(market);
                if (shop != null)
                {
                    shops.Add(shop);
                }
            }

            //отсортировали список магазинов по убыванию количества листингов
            shops.Sort(delegate(RootParsingObject shop1, RootParsingObject shop2)
                       { return(shop2.listings.Count.CompareTo(shop1.listings.Count)); });

            //делаем первый эшелон магазинов с самыми классными фотками
            var titolo       = shops.Find(x => x.market_info.name == "titolo.ch");
            var chmielna     = shops.Find(x => x.market_info.name == "chmielna20.pl");
            var asfaltgold   = shops.Find(x => x.market_info.name == "asphaltgold.de");
            var hhv          = shops.Find(x => x.market_info.name == "hhv.de");
            var streetBeat   = shops.Find(x => x.market_info.name == "street-beat.ru");
            var firstEshelon = new List <RootParsingObject>()
            {
                titolo, chmielna, asfaltgold, hhv, streetBeat
            };

            //очищаем все артикулы от фоток
            //foreach (var fcRecord in fullCatalog.records)
            //{
            //    fcRecord.images = new List<string>();
            //}
            //Program.logger.Info("Очистили от фоток. Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);

            /*Теперь делаем самое главное:
             * проходимся по всему списку артикулов
             * каждый артикул проверяем на наличие в магазине
             * если он в магазине есть, смотрим, есть ли для него фотки
             * если есть то заполняем
             */

            //первый проход делаем по первому эшелону магазинов
            int i             = 0;
            int addedPhotos   = 0;
            int updatedPhotos = 0;
            int status1       = 1;
            int status2       = 1;

            Program.Logger.Info("Start FirstEshelon. Всего артикулов:" + fullCatalog.records.Count + " Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);
            foreach (var fcRecord in fullCatalog.records)
            {
                if (fcRecord.sku == "724821-100")
                {
                    bool test = true;
                }

                //пропускаем артикул, если для него уже были взяты фотки с одного из сайтов эшелонов
                List <string> images = new List <string>();
                if (fcRecord.images == null)
                {
                    images = GetImages(fcRecord, firstEshelon, shopCatalog);
                }
                else if (fcRecord.images.Count == 0)
                {
                    images = GetImages(fcRecord, firstEshelon, shopCatalog);
                }
                else if (!fcRecord.images[0].Contains("img.sneaker-icon.ru"))
                {
                    images = GetImages(fcRecord, firstEshelon, shopCatalog);
                }
                else
                {
                    //если уже с нашего сервака фотка, то проверяем, с сайта эшелона или нет
                    var  image           = fcRecord.images[0];
                    bool isEshelonPhotos = false;
                    foreach (var shop in firstEshelon)
                    {
                        int shopNumber = shopCatalog.markets.Find(x => x.name == shop.market_info.name).number;
                        if (image.Contains("/shops/" + shopNumber + "/images/"))
                        {
                            isEshelonPhotos = true;
                            break;
                        }
                    }
                    if (!isEshelonPhotos)
                    {
                        images = GetImages(fcRecord, firstEshelon, shopCatalog);
                    }
                }

                if (images.Count > 0)
                {
                    fcRecord.images = images;
                    if (fcRecord.images == null)
                    {
                        addedPhotos++;
                    }
                    else
                    if (fcRecord.images.Count == 0)
                    {
                        addedPhotos++;
                    }
                    else
                    {
                        updatedPhotos++;
                    }
                }
                i++;
                if (i > 100 * status1)
                {
                    status1++;
                }
                if (status1 > status2)
                {
                    var time = DateTime.Now - startTime;
                    Program.Logger.Debug("Пройдено:" + i + " Добавлено:" + addedPhotos + " Обновлено:" + updatedPhotos + " time:" + time.Minutes);
                    status2 = status1;
                }
            }
            Program.Logger.Info("Finish FirstEshelon. Всего артикулов:" + fullCatalog.records.Count + " Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);
            Program.Logger.Info("Добавлено артикулов:" + addedPhotos + " Обновлено артикулов:" + updatedPhotos);


            //теперь проходимся по всем магазинам (можно конечно первый эшелон удалить, но чет лень, всё равно фотки с изображениями пропускаем)
            Program.Logger.Info("Start AllShops. Всего артикулов:" + fullCatalog.records.Count + " Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);
            i       = 0;
            status1 = 1;
            status2 = 1;
            foreach (var fcRecord in fullCatalog.records)
            {
                //пропускаем фотки у которых в имени файла уже содержится img.sneaker-icon.ru, т.е. значит что они уже были добавлены из первого эшелона или про прошлом проходе UpdateFullCatalogImages. по сути нам нужно взять только те артикулы, у которых нет фоток или у которых фотки с сайта а не с нашего сервака
                List <string> images = new List <string>();
                if (fcRecord.images == null)
                {
                    images = GetImages(fcRecord, shops, shopCatalog);
                }
                else if (fcRecord.images.Count == 0)
                {
                    images = GetImages(fcRecord, shops, shopCatalog);
                }
                else if (!fcRecord.images[0].Contains("img.sneaker-icon.ru/shops/"))
                {
                    images = GetImages(fcRecord, shops, shopCatalog);
                }

                if (images.Count > 0)
                {
                    fcRecord.images = images;
                    if (fcRecord.images == null)
                    {
                        addedPhotos++;
                    }
                    else
                    if (fcRecord.images.Count == 0)
                    {
                        addedPhotos++;
                    }
                    else
                    {
                        updatedPhotos++;
                    }
                }
                i++;
                if (i > 100 * status1)
                {
                    status1++;
                }
                if (status1 > status2)
                {
                    var time = DateTime.Now - startTime;
                    Program.Logger.Debug("Пройдено:" + i + " Добавлено:" + addedPhotos + " Обновлено:" + updatedPhotos + " time:" + time.Minutes);
                    status2 = status1;
                }
            }
            Program.Logger.Info("Finish AllShops. Всего артикулов:" + fullCatalog.records.Count + " Артикулов без фотографий: " + fullCatalog.records.FindAll(x => x.images.Count == 0).Count);
            Program.Logger.Info("Добавлено артикулов:" + addedPhotos + " Обновлено артикулов:" + updatedPhotos);

            SaveFullCatalogToFtp(fullCatalog);
        }