Esempio n. 1
0
        protected override Action <ProcessQueueItem> GetItemProcessor(ProcessQueueItem item)
        {
            Action <ProcessQueueItem> act;

            switch (item.ItemType)
            {
            case ProcessLevels.Category:
                act = ProcessCategoryListPage;
                break;

            case ProcessLevels.SubCategory:
                act = ProcessSubCategoryListPage;
                break;

            case ProcessLevels.ProductPager:
                act = ProcessProductPagerPage;
                break;

            case ProcessLevels.ProductList:
                act = ProcessProductListPage;
                break;

            case ProcessLevels.ProductDetails:
                act = ProcessDetailsPage;
                break;

            default:
                act = null;
                break;
            }

            return(act);
        }
Esempio n. 2
0
        private void ProcessProductListPage(ProcessQueueItem pqi)
        {
            if (cancel)
            {
                return;
            }

            var wi   = (ExtWareInfo)pqi.Item;
            var html = PageRetriever.ReadFromServer(pqi.URL);
            var doc  = CreateDoc(html);

            pqi.Processed = true;

            var products = doc.DocumentNode.SelectNodes("//ul[contains(@class,'ProductList')]/li");

            if (products == null)
            {
                Log.Error(products, new NullReferenceException());

                return;
            }

            foreach (var product in products)
            {
                var a    = product.SelectSingleNode(".//div[@class='ProductDetails']/strong/a[@href]");
                var name = a.InnerTextOrNull();

                if (string.IsNullOrWhiteSpace(name))
                {
                    Log.Warn(product, new NullReferenceException());

                    continue;
                }

                var url = a.AttributeOrNull("href");

                wi.Url = url;

                lock (this)
                {
                    lstProcessQueue.Add(new ProcessQueueItem
                    {
                        Item     = wi,
                        Name     = name,
                        ItemType = ProcessLevels.ProductDetails,
                        URL      = url
                    });
                }
            }

            OnItemLoaded(null);
            pqi.Processed = true;

            MessagePrinter.PrintMessage("Product list processed");
            StartOrPushPropertiesThread();
        }
Esempio n. 3
0
        private void ProcessCategoryListPage(ProcessQueueItem pqi)
        {
            if (cancel)
            {
                return;
            }

            var html = PageRetriever.ReadFromServer(pqi.URL);
            var doc  = CreateDoc(html);

            pqi.Processed = true;

            var categories = doc.DocumentNode.SelectNodes("//ul[@class='category-list']/li/ul/li");

            if (categories == null)
            {
                Log.Error(categories, new NullReferenceException());
                return;
            }

            foreach (var category in categories)
            {
                var a    = category.SelectSingleNode(".//a[@href]");
                var name = a.InnerTextOrNull();

                if (string.IsNullOrWhiteSpace(name))
                {
                    Log.Warn(category, new NullReferenceException());
                    continue;
                }

                var wi = new ExtWareInfo
                {
                    Category = name
                };
                var url = a.AttributeOrNull("href");

                lock (this)
                {
                    lstProcessQueue.Add(new ProcessQueueItem
                    {
                        Item     = wi,
                        ItemType = ProcessLevels.SubCategory,
                        URL      = Url + url,
                        Name     = name
                    });
                }
            }

            OnItemLoaded(null);
            pqi.Processed = true;

            MessagePrinter.PrintMessage("Category list processed");
            StartOrPushPropertiesThread();
        }
Esempio n. 4
0
        private void ProcessBrandsListPage(ProcessQueueItem pqi)
        {
            if (cancel)
            {
                return;
            }

            pqi.Processed = true;
            MessagePrinter.PrintMessage("Brands list processed");
            StartOrPushPropertiesThread();
        }
Esempio n. 5
0
        protected override Action <ProcessQueueItem> GetItemProcessor(ProcessQueueItem item)
        {
            Action <ProcessQueueItem> act;

            if (item.ItemType == 1)
            {
                act = ProcessBrandsListPage;
            }

            else
            {
                act = null;
            }

            return(act);
        }
Esempio n. 6
0
        private void InitiateScheduler()
        {
            // Timed: Retrying messages in Queue
            ExecuteTasksDelegate objExecuteTasksDelegate = new ExecuteTasksDelegate(this.RetryMessagesInQueue);

            ScheduleRepeatingPattern objScheduleRepeatingPattern = new ScheduleRepeatingPattern(RepeatingPattern.PerHour, DateTime.Now);
            ProcessQueueItem         objProcessQueueItem         = new ProcessQueueItem(objExecuteTasksDelegate, new object[] { });
            ScheduleItem             objScheduleItem             = new ScheduleItem(objScheduleRepeatingPattern, objProcessQueueItem);

            this.taskScheduler.Insert(objScheduleItem, false);

            // Starts the scheduler
            Trace.WriteLine("Scheduler starting...", "InitializeScheduler");
            this.taskScheduler.Start(1000);
            Trace.WriteLine("Scheduler started", "InitializeScheduler");
        }
Esempio n. 7
0
        private void ProcessDetailsPage(ProcessQueueItem pqi)
        {
            if (cancel)
            {
                return;
            }

            var wi   = (ExtWareInfo)pqi.Item;
            var html = PageRetriever.ReadFromServer(pqi.URL);
            var doc  = CreateDoc(html);

            pqi.Processed = true;

            var details = doc.DocumentNode.SelectSingleNode("//div[@class='BlockContent']");

            if (details == null)
            {
                Log.Error(details, new NullReferenceException());
                return;
            }

            var images = details.SelectNodes("//div[@class='ProductTinyImageList']/ul/li/div[@class='TinyOuterDiv']/div/a[@rel]")
                         .Select(s => JsonConvert.DeserializeObject <ImageObject>(s.AttributeOrNull("rel")));
            var item = new ExtWareInfo
            {
                Category    = wi.Category,
                SubCategory = wi.SubCategory,
                Page        = wi.Page,
                Url         = wi.Url,
                Title       = details.SelectSingleNode("//h1").InnerTextOrNull(),
                Description = details.SelectSingleNode("//div[@class='ProductDescriptionContainer']").InnerTextOrNull(),
                Price       = ParsePrice(details.SelectSingleNode("//em[@class='ProductPrice VariationProductPrice']").InnerTextOrNull()),
                Weight      = ParseDouble(details.SelectSingleNode("//span[@class='VariationProductWeight']").InnerTextOrNull()),
                Images      = String.Join(";", images.Select(s => s.largeimage))
            };

            AddWareInfo(item);

            OnItemLoaded(null);
            MessagePrinter.PrintMessage("Product '" + item.Title + "' details processed");
            StartOrPushPropertiesThread();
        }
Esempio n. 8
0
        private void ProcessProductPagerPage(ProcessQueueItem pqi)
        {
            if (cancel)
            {
                return;
            }


            var wi   = (ExtWareInfo)pqi.Item;
            var html = PageRetriever.ReadFromServer(pqi.URL);
            var doc  = CreateDoc(html);

            pqi.Processed = true;

            var pages = doc.DocumentNode.SelectNodes("//ul[@class='PagingList'][1]/li/a[@href]");

            if (pages == null)
            {
                wi.Page = 1;

                lock (this)
                {
                    lstProcessQueue.Add(new ProcessQueueItem
                    {
                        Item     = wi,
                        ItemType = ProcessLevels.ProductList,
                        URL      = pqi.URL
                    });
                }
            }
            else
            {
                wi.Page = 1;

                lock (this)
                {
                    lstProcessQueue.Add(new ProcessQueueItem
                    {
                        Item     = wi,
                        ItemType = ProcessLevels.ProductList,
                        URL      = pqi.URL
                    });
                }

                foreach (var page in pages)
                {
                    var name = page.InnerTextOrNull();

                    if (string.IsNullOrWhiteSpace(name))
                    {
                        Log.Warn(page, new NullReferenceException());
                        continue;
                    }

                    wi.Page = ParseInt(name);

                    lock (this)
                    {
                        lstProcessQueue.Add(new ProcessQueueItem
                        {
                            Item     = wi,
                            ItemType = ProcessLevels.ProductList,
                            URL      = page.AttributeOrNull("href")
                        });
                    }
                }
            }

            OnItemLoaded(null);
            pqi.Processed = true;

            MessagePrinter.PrintMessage("Product pager processed");
            StartOrPushPropertiesThread();
        }
Esempio n. 9
0
        private void InitiateScheduler()
        {
            // Timed: Retrying messages in Queue
              ExecuteTasksDelegate objExecuteTasksDelegate = new ExecuteTasksDelegate(this.RetryMessagesInQueue);

              ScheduleRepeatingPattern objScheduleRepeatingPattern = new ScheduleRepeatingPattern(RepeatingPattern.PerHour, DateTime.Now);
              ProcessQueueItem objProcessQueueItem = new ProcessQueueItem(objExecuteTasksDelegate, new object[] { });
              ScheduleItem objScheduleItem = new ScheduleItem(objScheduleRepeatingPattern, objProcessQueueItem);
              this.taskScheduler.Insert(objScheduleItem, false);

              // Starts the scheduler
              Trace.WriteLine("Scheduler starting...", "InitializeScheduler");
              this.taskScheduler.Start(1000);
              Trace.WriteLine("Scheduler started", "InitializeScheduler");
        }