Пример #1
0
        public static List <PriceSourceItemOld> GetPrice(GPUOld gpuOld, PriceSourceOld priceSource)
        {
            List <PriceSourceItemOld> priceSourceItems = new List <PriceSourceItemOld>();

            WriteLine($"Getting Price From {priceSource.Name} For GPU {gpuOld.Name}");
            //is it an api or something, else we are going to scrape the shit out of it...
            if (priceSource.PriceSourceAction != null)
            {
                List <PriceSourceItemOld> result = priceSource.PriceSourceAction.Invoke(priceSource.PriceSourceItemIdentifier);
                priceSourceItems.AddRange(result);
            }
            else
            {
                string response  = GetHttpResponseTextWithJavascript(priceSource.URL);
                string PriceText = GetTextFromHtmlStringByCssSelector(response, priceSource.Selector);

                string nameText = GetTextFromHtmlStringByCssSelector(response, priceSource.ItemNameSelector);
                if (string.IsNullOrEmpty(PriceText))
                {
                    return(priceSourceItems);
                }

                string currency = "USD";
                string imageUrl = null;
                if (!string.IsNullOrWhiteSpace(priceSource.ImageUrlSelector))
                {
                    imageUrl = GetTextFromHtmlStringByCssSelector(response, priceSource.ImageUrlSelector);
                }

                if (PriceText.IndexOf("$") > -1)
                {
                    PriceText = PriceText.Remove(PriceText.IndexOf("$"), 1);
                    currency  = "USD";
                }
                if (PriceText.IndexOf("SR") > -1)
                {
                    PriceText = PriceText.Remove(PriceText.IndexOf("SR"), 2);
                    currency  = "SAR";
                }

                PriceSourceItemOld priceSourceItem = new PriceSourceItemOld()
                {
                    Name          = nameText,
                    Price         = double.Parse(PriceText),
                    Selector      = priceSource.Selector,
                    PriceCurrency = currency
                };
                if (!string.IsNullOrWhiteSpace(imageUrl))
                {
                    priceSourceItem.ImageUrl = imageUrl;
                }

                priceSourceItems.Add(priceSourceItem);
            }

            return(priceSourceItems);
        }
Пример #2
0
        private static void FillUSDPrice(PriceSourceItemOld priceSourceItem)
        {
            if (priceSourceItem == null || priceSourceItem.Price <= 0 || string.IsNullOrWhiteSpace(priceSourceItem.PriceCurrency))
            {
                return;
            }

            string curr          = priceSourceItem.PriceCurrency.ToUpper();
            string targetCurrKey = baseCurrency + curr;

            if (pricesDict.ContainsKey(targetCurrKey))
            {
                //this is what 1 USD equals
                double rate = pricesDict[targetCurrKey];
                //1 USD = rate in target currency
                //? USD = price target currency
                //so divide the price by the rate
                double priceUsd = priceSourceItem.Price / rate;
                priceSourceItem.PriceUSD = Math.Round(priceUsd, 2);
            }
        }
Пример #3
0
        public static List <PriceSourceItemOld> ToPriceSourceItemsOld(this ItemLookupResponse amazonItemResponse)
        {
            List <PriceSourceItemOld> result = new List <PriceSourceItemOld>();

            if (amazonItemResponse == null || amazonItemResponse.Items.Item == null)
            {
                return(result);
            }
            foreach (var item in amazonItemResponse.Items.Item)
            {
                string asin     = item.ASIN;
                string url      = item.DetailPageURL;
                string imageUrl = item.LargeImage?.URL;
                if (string.IsNullOrWhiteSpace(imageUrl) && item.ImageSets?.Length > 0)
                {
                    imageUrl = item.ImageSets.FirstOrDefault()?.LargeImage?.URL;
                }
                string itemName = item.ItemAttributes.Title;

                string model        = item.ItemAttributes.Model;
                string modelYear    = item.ItemAttributes.ModelYear;
                string brand        = item.ItemAttributes.Brand;
                string manufacturer = item.ItemAttributes.Manufacturer;
                string ean          = item.ItemAttributes.EAN;
                if (string.IsNullOrWhiteSpace(itemName))
                {
                    itemName = item.ToString();
                }

                if (item.Offers.TotalOffers != "0")
                {
                    foreach (var offer in item.Offers.Offer)
                    {
                        string merchant = offer.Merchant?.Name;
                        foreach (var offerListing in offer.OfferListing)
                        {
                            PriceSourceItemOld priceSourceItem = new PriceSourceItemOld();
                            priceSourceItem.Merchant     = merchant;
                            priceSourceItem.ASIN         = asin;
                            priceSourceItem.URL          = url;
                            priceSourceItem.ImageUrl     = imageUrl;
                            priceSourceItem.Name         = itemName;
                            priceSourceItem.Model        = model;
                            priceSourceItem.ModelYear    = modelYear;
                            priceSourceItem.Brand        = brand;
                            priceSourceItem.Manufacturer = manufacturer;
                            priceSourceItem.Ean          = ean;
                            string priceStr = offerListing.Price.Amount;
                            priceSourceItem.Name          = itemName;
                            priceSourceItem.PriceCurrency = offerListing.Price.CurrencyCode;
                            if (!string.IsNullOrWhiteSpace(offerListing.SalePrice?.Amount))
                            {
                                priceStr = offerListing.SalePrice.Amount;
                                priceSourceItem.PriceCurrency = offerListing.SalePrice.CurrencyCode;
                            }
                            if (priceStr.Length >= 2)
                            {
                                priceStr = priceStr.Insert(priceStr.Length - 2, ".");
                            }
                            priceSourceItem.Price = double.Parse(priceStr);
                            result.Add(priceSourceItem);
                        }
                    }
                }
                else if (item.ItemLinks.FirstOrDefault(l => l.Description == "All Offers") != null)
                {
                    //Usually if that is not here then there are no offers
                    if (item.OfferSummary?.LowestNewPrice?.Amount != null)
                    {
                        url = item.ItemLinks.FirstOrDefault(l => l.Description == "All Offers").URL;
                        PriceSourceItemOld priceSourceItem = new PriceSourceItemOld();
                        priceSourceItem.ASIN         = asin;
                        priceSourceItem.Name         = itemName;
                        priceSourceItem.URL          = url;
                        priceSourceItem.ImageUrl     = imageUrl;
                        priceSourceItem.Model        = model;
                        priceSourceItem.ModelYear    = modelYear;
                        priceSourceItem.Brand        = brand;
                        priceSourceItem.Manufacturer = manufacturer;
                        priceSourceItem.Ean          = ean;

                        string priceStr = item.OfferSummary.LowestNewPrice.Amount;
                        priceSourceItem.PriceCurrency = item.OfferSummary.LowestNewPrice.CurrencyCode;
                        if (priceStr.Length >= 2)
                        {
                            priceStr = priceStr.Insert(priceStr.Length - 2, ".");
                        }
                        priceSourceItem.Price = double.Parse(priceStr);
                        result.Add(priceSourceItem);
                    }
                }
            }
            return(result);
        }
Пример #4
0
        public static List <PriceSourceItemOld> ToPriceSourceItems(this AmazonItemResponse amazonItemResponse)
        {
            List <PriceSourceItemOld> result = new List <PriceSourceItemOld>();

            if (amazonItemResponse == null)
            {
                return(result);
            }
            foreach (var item in amazonItemResponse.Items.Item)
            {
                string asin     = item.ASIN;
                string url      = item.DetailPageURL;
                string imageUrl = item.LargeImage.URL;

                if (item.Offers.TotalOffers != "0")
                {
                    foreach (var offer in item.Offers.Offer)
                    {
                        string merchant = offer.Merchant?.Name;
                        foreach (var offerListing in offer.OfferListing)
                        {
                            PriceSourceItemOld priceSourceItem = new PriceSourceItemOld();

                            priceSourceItem.Merchant = merchant;
                            priceSourceItem.ASIN     = asin;
                            string itemName = item.ToString();
                            priceSourceItem.Name     = itemName;
                            priceSourceItem.URL      = url;
                            priceSourceItem.ImageUrl = imageUrl;
                            string priceStr = offerListing.Price.Amount;
                            priceSourceItem.PriceCurrency = offerListing.Price.CurrencyCode;
                            if (!string.IsNullOrWhiteSpace(offerListing.SalePrice?.Amount))
                            {
                                priceStr = offerListing.SalePrice.Amount;
                                priceSourceItem.PriceCurrency = offerListing.SalePrice.CurrencyCode;
                            }
                            if (priceStr.Length >= 2)
                            {
                                priceStr = priceStr.Insert(priceStr.Length - 2, ".");
                            }
                            priceSourceItem.Price = double.Parse(priceStr);
                            result.Add(priceSourceItem);
                        }
                    }
                }
                else if (item.ItemLinks.FirstOrDefault(l => l.Description == "All Offers") != null)
                {
                    url = item.ItemLinks.FirstOrDefault(l => l.Description == "All Offers").URL;
                    PriceSourceItemOld priceSourceItem = new PriceSourceItemOld();
                    string             itemName        = item.ToString();
                    priceSourceItem.Name     = itemName;
                    priceSourceItem.ASIN     = asin;
                    priceSourceItem.URL      = url;
                    priceSourceItem.ImageUrl = imageUrl;
                    string priceStr = item.OfferSummary.LowestNewPrice.Amount;
                    priceSourceItem.PriceCurrency = item.OfferSummary.LowestNewPrice.CurrencyCode;
                    if (priceStr.Length >= 2)
                    {
                        priceStr = priceStr.Insert(priceStr.Length - 2, ".");
                    }
                    priceSourceItem.Price = double.Parse(priceStr);
                    result.Add(priceSourceItem);
                }
            }
            return(result);
        }