Example #1
0
        static void Main(string[] args)
        {
            var product = new AmazonProduct("B010S9N6OO");

            Program.PrintReviews(product);
            System.Console.ReadLine();
        }
Example #2
0
        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));
        }
Example #3
0
        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}");
            }
        }
Example #4
0
        // 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());
        }
Example #5
0
        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
                });
            }
        }
Example #6
0
        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()] = "";
                }
            }
        }
Example #7
0
        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;
        }
Example #8
0
        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...");
        }
Example #9
0
        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";
        }
Example #10
0
        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);
            }
        }
Example #11
0
        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);
        }
Example #12
0
        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();
        }
Example #13
0
 private void DeleteKeywordAssignment(AmazonProduct productToUpdate)
 {
     _context.KeywordAssignment.RemoveRange(_context.KeywordAssignment.Where(i => i.ProductID == productToUpdate.AmazonProductID));
     _context.SaveChanges();
 }
Example #14
0
 private void DeleteProductSizes(AmazonProduct productToUpdate)
 {
     _context.ProductSizes.RemoveRange(_context.ProductSizes.Where(i => i.ProductID == productToUpdate.AmazonProductID));
     _context.SaveChanges();
 }
Example #15
0
        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;
                    }
                }
            }
        }