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); }
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); } }
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); }
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); }