Beispiel #1
0
        private void ParseColumn(Models.Buyer buyer, string priceRange, string productName, string quality, DateTime asOf)
        {
            if (priceRange.TrimEnd() != "--" && priceRange.TrimEnd() != "nb" && priceRange.TrimEnd() != "na")
            {
                var p = new Models.Product();
                p.Name    = productName;
                p.Quality = quality;

                var price = new Models.Price();
                price.AsOf = asOf;

                if (priceRange.Contains("-"))
                {
                    var prices = priceRange.Split('-');
                    price.MinPrice = decimal.Parse(prices[0]);
                    price.MaxPrice = decimal.Parse(prices[1]);
                }
                else
                {
                    price.MinPrice = decimal.Parse(priceRange);
                    price.MaxPrice = decimal.Parse(priceRange);
                }
                var bp = new Models.BuyerProduct();
                bp.Id      = Guid.NewGuid().ToString();
                bp.Buyer   = buyer;
                bp.Product = p;
                bp.Price   = price;
                this.items.Add(bp);
            }
        }
        private void ParseNewProduct(HtmlNodeNavigator navigator, Models.Product product, ParsingResults res, string link)
        {
            string        header      = ConnectStrings(navigator.Select(Rules_.HeaderXpath));
            string        desctiption = ConnectStrings(navigator.Select(Rules_.DescriptionXpath));
            string        priceValue  = ConnectStrings(navigator.Select(Rules_.PriceXpath));
            List <string> pictures    = ListValue(navigator.Select(Rules_.PicturesXpath));

            product = new Models.Product()
            {
                Description = desctiption,
                Name        = header,
                Link        = link,
                ImageUrl    = (pictures.Count > 0 ? pictures[0] : ""),
                Price       = priceValue
            };
            Models.Price price = new Models.Price()
            {
                Product = product, Date = DateTime.Now, PriceValue = priceValue
            };
            List <Models.Picture> thumbs = new List <Models.Picture>();

            foreach (string url in pictures)
            {
                thumbs.Add(new Models.Picture()
                {
                    Product = product, PictureUrl = url
                });
            }
            res.AddedPictures.AddRange(thumbs);
            res.AddedPrices.Add(price);
            res.AddedProducts.Add(product);
        }
Beispiel #3
0
        public static Price ToCoreModel(this Models.Price price)
        {
            var retVal = new Price();

            retVal.InjectFrom(price);
            retVal.Currency = price.Currency;
            return(retVal);
        }
Beispiel #4
0
        public static Models.Price ToWebModel(this Price price)
        {
            var retVal = new Models.Price();

            retVal.InjectFrom(price);
            retVal.Currency = price.Currency;
            if (price.Pricelist != null)
            {
                retVal.PriceListName = price.Pricelist.Name;
            }
            return(retVal);
        }
        public ParsingResults Parse(System.Net.WebClient client, List <Models.Product> ProductList)
        {
            HtmlDocument doc = new HtmlDocument();

            for (int i = 0; i < PagesLinks_.Count; i++)
            {
                try
                {
                    string source = client.DownloadString(PagesLinks_[i]);

                    Console.Write(PagesLinks_[i] + " " + i.ToString() + "\n");
                    doc.LoadHtml(source);
                    HtmlNodeNavigator navigator = (HtmlNodeNavigator)doc.CreateNavigator();
                    var productNodes            = navigator.Select(Rules_.DetailsXpath);
                    AddProducts(productNodes);
                    var pagesNodes = navigator.Select(Rules_.PaginationXpath);
                    AddPages(pagesNodes);
                }
                catch (System.Net.WebException) { }
            }
            ParsingResults res = new ParsingResults();

            for (int i = 0; i < ProductsLinks_.Count; i++)
            {
                string source = client.DownloadString(ProductsLinks_[i]);
                Console.Write(ProductsLinks_[i] + " " + i.ToString() + "\n");
                doc.LoadHtml(source);
                HtmlNodeNavigator navigator = (HtmlNodeNavigator)doc.CreateNavigator();
                var product = IsAlreadyParsed(source, ProductList);
                if (product != null)
                {
                    string       priceValue = ConnectStrings(navigator.Select(Rules_.PriceXpath));
                    Models.Price price      = new Models.Price()
                    {
                        Product = product, Date = DateTime.Now, PriceValue = priceValue
                    };
                    product.Price = priceValue;
                    res.AddedPrices.Add(price);
                }
                else
                {
                    ParseNewProduct(navigator, product, res, ProductsLinks_[i]);
                }
            }
            return(res);
        }