static void Main(string[] args) { var product = new AmazonProduct("B010S9N6OO"); Program.PrintReviews(product); System.Console.ReadLine(); }
public async Task <IActionResult> Create([Bind("AmazonTypeID,AmazonAccountID,Description,Name,Prefix")] AmazonProduct amazonProduct, IList <AssignedKeywordsViewModel> keywords, List <int> Sizes) { amazonProduct.Sizes = new List <ProductSizes>(); amazonProduct.Keywords = new List <KeywordAssignment>(); UpdateProductSizes(Sizes, amazonProduct); UpdateProductKeywords(keywords, amazonProduct); try { if (ModelState.IsValid) { _context.Add(amazonProduct); await _context.SaveChangesAsync(); return(RedirectToAction("Index")); } } catch (DbUpdateException ex) { //Log the error (uncomment ex variable name and write a log. ModelState.AddModelError(ex.ToString(), "Unable to save changes. " + "Try again, and if the problem persists " + "see your system administrator."); } ViewData["AmazonSizeID"] = new MultiSelectList(_context.AmazonSizes, "AmazonSizeID", "Name", amazonProduct.Sizes.Select(i => i.SizeID).ToArray()); ViewData["AmazonTypeID"] = new SelectList(_context.AmazonTypes, "AmazonTypeID", "Name", amazonProduct.AmazonTypeID); ViewData["AmazonAccountID"] = new SelectList(_context.AmazonAccounts, "AmazonAccountID", "Name", amazonProduct.AmazonAccountID); return(View(amazonProduct)); }
private async void CheckProductStockAsync(AmazonProduct product) { string availabilityString; try { availabilityString = await ParseStringFromUrl(product.Url, Config.XPath); } catch (Exception ex) { Console.WriteLine($"{DateTime.Now:T} - [Amazon.{Config.AmazonDomain} {product.Description}] ERROR: {ex.Message}"); return; } var isAvailable = CheckAvailability(availabilityString); if (isAvailable.Item1) { Console.WriteLine($"{DateTime.Now:T} - [Amazon.{Config.AmazonDomain} {product.Description}] {isAvailable.Item2}"); SendTelegramMessage($"[Amazon.{Config.AmazonDomain} {product.Description}] {isAvailable.Item2} {Environment.NewLine}{product.Url}"); } else { Console.WriteLine($"{DateTime.Now:T} - [Amazon.{Config.AmazonDomain} {product.Description}] {isAvailable.Item2}"); } }
// GET: AmazonProducts/Create public IActionResult Create() { var amazonProduct = new AmazonProduct(); amazonProduct.Keywords = new List <KeywordAssignment>(); ViewData["AmazonSizeID"] = new MultiSelectList(_context.AmazonSizes, "AmazonSizeID", "Name"); ViewData["AmazonTypeID"] = new SelectList(_context.AmazonTypes, "AmazonTypeID", "Name"); ViewData["AmazonAccountID"] = new SelectList(_context.AmazonAccounts, "AmazonAccountID", "Name"); return(View()); }
private void UpdateProductSizes(List <int> Sizes, AmazonProduct productToUpdate) { _context.ProductSizes.RemoveRange(_context.ProductSizes.Where(i => i.ProductID == productToUpdate.AmazonProductID)); _context.SaveChanges(); foreach (var sizeid in Sizes) { productToUpdate.Sizes.Add(new ProductSizes { ProductID = productToUpdate.AmazonProductID, SizeID = sizeid }); } }
private void PopulateAssignedKeywordData(AmazonProduct amazonProduct) { var productKeywords = amazonProduct .Keywords .ToDictionary(c => c.Order, c => c.Keyword.Keyword); for (int i = 0; i < 5; i++) { if (productKeywords.Keys.Contains(i)) { ViewData[i.ToString()] = productKeywords[i]; } else { ViewData[i.ToString()] = ""; } } }
private async void searchButton_Click(object sender, RoutedEventArgs e) { var tempcolor = indicatorCircle.Fill; indicatorCircle.Fill = yellowColor; searchButton.IsEnabled = false; try { data = await Amazon.GetProductInfoAsync(code.Text); title.Text = data.Title; rating.Text = data.Rating.ToString(); totalreview.Text = data.TotalReviews.ToString(); recent.Text = data.RecentReviews.ToString(); isdataavailable = true; if (locationset) { saveButton.IsEnabled = true; } if (!ViewedItem.Contains(code.Text)) { ViewedItem.Add(code.Text); } } catch (Exception) { MessageBox.Show("Please enter a valid product code or restart the session.", "A small problem", MessageBoxButton.OK, MessageBoxImage.Exclamation); } if (string.IsNullOrWhiteSpace(code.Text) || condition == false) { searchButton.IsEnabled = false; } else { searchButton.IsEnabled = true; } indicatorCircle.Fill = tempcolor; }
private static async void PrintReviews(AmazonProduct product) { var reviews = await product.GetReviews(0, 20, progressReporter : message => { System.Console.WriteLine(message); }); using (var file = File.Create("./data.txt")) using (TextWriter fw = new StreamWriter(file)) { foreach (var review in reviews) { fw.WriteLine($"{review.Stars};{review.Title};{review.Text}"); //System.Console.WriteLine(string.Format($"Stars: {review.Stars}, Title: {review.Title}")); } } System.Console.WriteLine(reviews.Count + " review stored in file data.txt"); System.Console.WriteLine("Press ENTER to exit..."); }
public ProductReviewRequestDescriptor(AmazonProduct product, int page, int pageSize = 100) { this.body = new Dictionary <string, string>() { { "sortBy", "" }, { "reviewerType", "all_reviews" }, { "formatType", "" }, { "mediaType", "" }, { "filterByStar", "" }, { "pageNumber", page.ToString() }, { "filterByKeyword", "" }, { "shouldAppend", "undefined" }, { "deviceType", "desktop" }, { "reftag", "cm_cr_arp_d_paging_btm_2" }, { "pageSize", pageSize.ToString() }, { "asin", product.ProductId }, { "scope", "reviewsAjax0" }, }; this.Url = "https://www.amazon.com/hz/reviews-render/ajax/reviews/get/ref=cm_cr_arp_d_paging_btm_2"; }
public async Task <ICollection <AmazonProductReview> > GetReviews(AmazonProduct product, int fromPage, int pageCount, Action <string> progressReporter) { if (fromPage < 0) { throw new ArgumentException(nameof(fromPage)); } if (pageCount < 1) { throw new ArgumentException(nameof(pageCount)); } using (var req = new AmazonAjaxRequest <ProductReviewRequestDescriptor, ProductReviewResponseParser, AmazonProductReview>()) { var results = new List <AmazonProductReview>(); try { int c = fromPage + pageCount; for (int i = fromPage; i < c; i++) { results.AddRange( await req.GetResponseFor(new ProductReviewRequestDescriptor(product, i, pageSize: 10)) // 10 položek na stráku ); if (progressReporter != null) { progressReporter.Invoke($"Iteration {i} finished."); } } } catch (Exception ex) // Pokud nastane chyba, vrátí alespoň to co se zatím podařilo stáhnout; Je dost možné, že server dočasně zablokoval IP { System.Diagnostics.Debug.WriteLine(ex.Message); } return(results); } }
public AmazonProduct ConvertAmazonProduct(Item item) { AmazonProduct amazonProduct = new AmazonProduct(); amazonProduct.ASIN = item.ASIN; amazonProduct.Url = item.DetailPageURL; amazonProduct.ImageUrl = item.SmallImage?.URL; amazonProduct.Title = item.ItemAttributes?.Title; amazonProduct.FormattedPrice = item.ItemAttributes?.ListPrice?.FormattedPrice; if (item.ItemAttributes != null && item.ItemAttributes.Feature != null && item.ItemAttributes.Feature.Length > 0) { StringBuilder sb = new StringBuilder(); foreach (string feature in item.ItemAttributes.Feature) { sb.AppendLine(feature + System.Environment.NewLine); } amazonProduct.Description = item.ItemAttributes.Feature[0]; } return(amazonProduct); }
private void ConvertToMovieLensFormat() { var reader = new StreamReader(_amazonDataFile); var writer = new StreamWriter(MovieLensFile); string line; var product = new AmazonProduct(); while ((line = reader.ReadLine()) != null) { var tline = line.Trim(); if (tline.StartsWith("ASIN")) { product.ASIN = tline.Split(' ')[1]; } else if (tline.StartsWith("title")) { product.Title = tline.Split(' ')[1]; } else if (tline.StartsWith("group")) { ProductGroup pg; if (Enum.TryParse <ProductGroup>(tline.Split(' ')[1], out pg)) { product.Group = pg; } else { Console.WriteLine(tline.Split(' ')[1]); product.Group = ProductGroup.Other; } } else if (tline.StartsWith("salerank")) { product.SalesRank = Convert.ToInt32(tline.Split(' ')[1]); } else if (tline.StartsWith("reviews")) { string rline; while ((rline = reader.ReadLine()) != "") { product.Reviews.Add(new ProductReview(rline.Trim(), product)); } } else if (tline.StartsWith("discontinued")) { product.ASIN = ""; } else if (tline.StartsWith("Id") && !String.IsNullOrEmpty(product.ASIN)) { //if (product.Group == ProductGroup.Book || product.Group == ProductGroup.Music) //{ // foreach (ProductReview pr in product.Reviews) // { // writer.WriteLine(string.Format("{0}::{1}::{2}::{3}", pr.UserId, product.ASIN, pr.Rating, pr.Date.ToUnixEpoch())); // } //} //writer.Flush(); _products.Add(product); product = new AmazonProduct(); } } reader.Close(); writer.Close(); }
private void DeleteKeywordAssignment(AmazonProduct productToUpdate) { _context.KeywordAssignment.RemoveRange(_context.KeywordAssignment.Where(i => i.ProductID == productToUpdate.AmazonProductID)); _context.SaveChanges(); }
private void DeleteProductSizes(AmazonProduct productToUpdate) { _context.ProductSizes.RemoveRange(_context.ProductSizes.Where(i => i.ProductID == productToUpdate.AmazonProductID)); _context.SaveChanges(); }
private void UpdateProductKeywords(IList <AssignedKeywordsViewModel> selectedKeywords, AmazonProduct productToUpdate) { var keywordsFromDb = _context.AmazonKeywords .ToDictionary(c => c.Keyword, c => c.AmazonKeywordID); for (int i = 0; i < selectedKeywords.Count; i++) { KeywordAssignment keywordToRemove = productToUpdate.Keywords.SingleOrDefault(a => a.Order == i); if (keywordToRemove != null) { _context.Remove(keywordToRemove); _context.SaveChanges(); } if (selectedKeywords[i].Keyword != null) { if (keywordsFromDb.Keys.Contains(selectedKeywords[i].Keyword)) { productToUpdate.Keywords.Add(new KeywordAssignment { ProductID = productToUpdate.AmazonProductID, KeywordID = keywordsFromDb[selectedKeywords[i].Keyword], Order = i }); } else { AmazonKeyword newKeyword = new AmazonKeyword { Keyword = selectedKeywords[i].Keyword }; _context.AmazonKeywords.Add(newKeyword); _context.SaveChanges(); productToUpdate.Keywords.Add(new KeywordAssignment { ProductID = productToUpdate.AmazonProductID, KeywordID = newKeyword.AmazonKeywordID, Order = i }); keywordsFromDb[newKeyword.Keyword] = newKeyword.AmazonKeywordID; } } } }