Ejemplo n.º 1
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.ProshopUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.ProshopUrl, Encoding.UTF8, CancellationToken.None);

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

            foreach (var product in products)
            {
                var inStock = product.SelectSingleNode(".//div[contains(@class, 'site-stock-text hidden-xs')]");
                if (inStock != null && !string.IsNullOrEmpty(inStock.InnerText))
                {
                    var decode = HttpUtility.HtmlDecode(inStock.InnerText);
                    var countN = 0;

                    if (decode.Contains("dager til levering"))
                    {
                        var productLink = product.SelectSingleNode(".//a[contains(@class, 'site-product-link')]");
                        if (productLink != null)
                        {
                            var hrefValue = productLink.GetAttributeValue("href", string.Empty);
                            countN = await GetProshopCount("https://www.proshop.no" + hrefValue);

                            list.Add(new InStockItem {
                                Url = "https://www.proshop.no" + hrefValue, Name = item.Name, Count = countN, Channel = item.DiscordChannel, Store = "Proshop.no", ChannelId = item.DiscordChannelId
                            });
                        }
                    }
                }
            }

            return(list);
        }
Ejemplo n.º 2
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.MulticomUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.MulticomUrl, Encoding.UTF8, CancellationToken.None);

            var products = doc.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), ' b-product-list__item ')]");

            foreach (var product in products)
            {
                var inStock = product.SelectSingleNode(".//span[contains(@class, 'b-stock-info__amount')]");

                if (inStock != null && !string.IsNullOrEmpty(inStock.InnerText))
                {
                    var decode = HttpUtility.HtmlDecode(inStock.InnerText);
                    var countN = GetCountInStock(decode);

                    var productLink = product.SelectSingleNode(".//a");
                    if (productLink != null)
                    {
                        var itemCheck = item.Name.Split(' ').Last();
                        var hrefValue = productLink.GetAttributeValue("href", string.Empty);
                        if (hrefValue.Contains(itemCheck))
                        {
                            list.Add(new InStockItem {
                                Url = "https://multicom.no" + hrefValue, Name = item.Name, Count = countN, Channel = item.DiscordChannel, Store = "Multicom.no", ChannelId = item.DiscordChannelId
                            });
                        }
                    }
                }
            }

            return(list);
        }
Ejemplo n.º 3
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.KomplettUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.KomplettUrl, Encoding.UTF8, CancellationToken.None);

            var products = doc.DocumentNode.Descendants().Where(x => x.HasClass("product-list-item")).ToList();

            foreach (var product in products)
            {
                var inStock = product.Descendants().FirstOrDefault(x => x.HasClass("stockstatus-stock-details"));
                if (inStock != null && !string.IsNullOrEmpty(inStock.InnerText))
                {
                    var decode = HttpUtility.HtmlDecode(inStock.InnerText);
                    var countN = GetCountInStock(decode);

                    var regex = new Regex(@"(?:^|\W)på lager.$(?:$|\W)");
                    if (regex.IsMatch(decode))
                    {
                        var productLink = product.Descendants().FirstOrDefault(x => x.HasClass("product-link"));
                        if (productLink != null)
                        {
                            var hrefValue = productLink.GetAttributeValue("href", string.Empty);
                            list.Add(new InStockItem {
                                Url = "https://komplett.no" + hrefValue, Name = item.Name, Count = countN, Channel = item.DiscordChannel, Store = "Komplett.no", ChannelId = item.DiscordChannelId
                            });
                        }
                    }
                }
            }

            return(list);
        }
Ejemplo n.º 4
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.PowerUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.PowerUrl, Encoding.UTF8, CancellationToken.None);

            var angularfuckery = doc.DocumentNode.SelectSingleNode(".//power-meta[contains(@id, 'angular-page-model')]");
            var data           = angularfuckery.GetAttributeValue("data", null);

            if (data != null)
            {
                var decodedByteHtml = Convert.FromBase64String(data);
                var body            = JsonSerializer.Deserialize <PowerProducts>(decodedByteHtml);

                if (body != null && body.Model != null && body.Model.ProductWrapper != null && body.Model.ProductWrapper.Products.Length > 0)
                {
                    foreach (var product in body.Model.ProductWrapper.Products)
                    {
                        if (product.StockCount > 0 && product.CategoryId == 1929)
                        {
                            list.Add(new InStockItem {
                                Url = "https://power.no" + product.Url, Name = item.Name, Count = product.StockCount.Value, Channel = item.DiscordChannel, Store = body.Model.SiteName, ChannelId = item.DiscordChannelId
                            });
                        }
                    }
                }
            }
            return(list);
        }
Ejemplo n.º 5
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.ElkjopUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.ElkjopUrl, Encoding.UTF8, CancellationToken.None);

            var products = doc.DocumentNode.Descendants().Where(x => x.HasClass("mini-product")).ToList();

            foreach (var product in products)
            {
                var inStock = product.Descendants().FirstOrDefault(x => x.HasClass("checkout-spacing"));
                if (inStock != null && !string.IsNullOrEmpty(inStock.InnerText))
                {
                    var decode = HttpUtility.HtmlDecode(inStock.InnerText);
                    var countN = GetCountInStock(decode);

                    var productLink = product.Descendants().FirstOrDefault(x => x.HasClass("product-image-link"));
                    if (productLink != null)
                    {
                        var hrefValue = productLink.GetAttributeValue("href", string.Empty);
                        list.Add(new InStockItem {
                            Url = hrefValue, Name = item.Name, Count = countN, Channel = item.DiscordChannel, Store = "Elkjop.no", ChannelId = item.DiscordChannelId
                        });
                    }
                }
            }

            return(list);
        }
Ejemplo n.º 6
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.NetonnetUrl))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.NetonnetUrl, Encoding.UTF8, CancellationToken.None);

            var products = doc.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), 'cProductItem')]");

            if (products != null)
            {
                foreach (var product in products)
                {
                    var inStock = product.SelectSingleNode(".//span[contains(@class, 'stockStatusInStock')]");

                    if (inStock != null)
                    {
                        var productLink = product.SelectSingleNode(".//a");
                        if (productLink != null)
                        {
                            var hrefValue = productLink.GetAttributeValue("href", string.Empty);
                            list.Add(new InStockItem {
                                Url = "https://netonnet.no" + hrefValue, Name = item.Name, Count = 0, Channel = item.DiscordChannel, Store = "NetOnNet.no", ChannelId = item.DiscordChannelId
                            });
                        }
                    }
                }
            }
            return(list);
        }
Ejemplo n.º 7
0
        public async Task <IEnumerable <InStockItem> > GetItemInStock(ItemsIWant item)
        {
            var list = new List <InStockItem>();

            if (string.IsNullOrEmpty(item.KomplettUrl))
            {
                return(list);
            }

            if (!item.Name.Contains("Komplett a240 Epic Gaming PC"))
            {
                return(list);
            }

            var webCrawler = new HtmlWeb()
            {
                AutoDetectEncoding = false,
                OverrideEncoding   = Encoding.UTF8
            };
            var doc = await webCrawler.LoadFromWebAsync(item.KomplettUrl, Encoding.UTF8, CancellationToken.None);

            var products = doc.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), ' buy-button-section ')]");

            foreach (var product in products)
            {
                var inStock = product.SelectSingleNode(".//div[contains(@class, 'buy-button')]");

                if (inStock != null && inStock.InnerText.Contains("Legg i handlevogn"))
                {
                    list.Add(new InStockItem {
                        Url = item.KomplettUrl, Name = item.Name, Count = 0, Channel = item.DiscordChannel, Store = "Komplett.no", ChannelId = item.DiscordChannelId
                    });
                }
            }

            return(list);
        }