Exemple #1
0
        public static async Task <IEnumerable <ProductDTO> > GetProductsByQueryAsync(string query)
        {
            try
            {
                var results = await HttpClientHelper.Get <WalmartMxSearchDto>(_UrlSearch + query);

                if (results?.Appendix?.SearchResults?.Content?.Any() != true)
                {
                    return(Enumerable.Empty <ProductDTO>());
                }

                var contents = results.Appendix.SearchResults.Content;
                var products = MapProducts(contents);

                return(products);
            }
            catch (Exception ex)
            {
                await QuisyDbRepository.AddLogAsync(LogType.Exception,
                                                    $"Exception at {nameof(WalmartMexicoWebScraper)}, method: {nameof(WalmartMexicoWebScraper.GetProductsByQueryAsync)}. " +
                                                    $"Query: {query}. Message {ex.Message}");

                return(Enumerable.Empty <ProductDTO>());
            }
        }
Exemple #2
0
        public async Task <IActionResult> Get(string provider, string query)
        {
            if (string.IsNullOrWhiteSpace(provider) || string.IsNullOrWhiteSpace(query))
            {
                return(BadRequest());
            }

            QuisyDbRepository.AddLogAsync(SqlDbRepository.Entities.LogType.Information, "Query: " + query);

            var cacheKey = BuildCacheKey(provider, query);

            if (_cache.TryGetValue <IEnumerable <ProductDTO> >(cacheKey, out var products))
            {
                return(Ok(products));
            }

            if (provider.ToLower() == "all")
            {
                products = await ScrapersFacade.GetAllProductsFromScrapersAsync(query);
            }
            else
            {
                products = await GetByProviderAsync(provider, query);
            }

            if (products?.Any() == true)
            {
                _cache.Set(cacheKey, products);
            }
            return(Ok(products));
        }
Exemple #3
0
        public static async Task <IEnumerable <ProductDTO> > GetProductsByQueryAsync(string query)
        {
            var url = string.Format(_UrlSearch, _IndexesCount, query.Replace(" ", "+"));

            try
            {
                var results = await HttpClientHelper.Get <TargetSearchResultDto>(url);

                var targetProducts = results?.Data.Search?.Products;
                if (targetProducts?.Any() != true)
                {
                    return(Enumerable.Empty <ProductDTO>());
                }

                var products = MapProducts(targetProducts);
                return(products);
            }
            catch (Exception ex)
            {
                await QuisyDbRepository.AddLogAsync(LogType.Exception,
                                                    $"Exception at {nameof(TargetWebApiScraper)}, method: {nameof(TargetWebApiScraper.GetProductsByQueryAsync)}. " +
                                                    $"Query: {query}. Message {ex.Message}");

                return(Enumerable.Empty <ProductDTO>());
            }
        }
Exemple #4
0
        public static async Task <IEnumerable <ProductDTO> > GetProductsByQueryAsync(string query)
        {
            try
            {
                var doc = GetHtmlFromEbay(query);
                if (doc == null)
                {
                    return(Enumerable.Empty <ProductDTO>());
                }
                var products = ExtractProductFromHtml(doc);
                return(FormatProducts(products.ToList()));
            }
            catch (Exception ex)
            {
                await QuisyDbRepository.AddLogAsync(LogType.Exception,
                                                    $"Exception at {nameof(CostcoWebScraper)}, method: {nameof(CostcoWebScraper.GetProductsByQueryAsync)}. " +
                                                    $"Query: {query}. Message {ex.Message}");

                return(Enumerable.Empty <ProductDTO>());
            }
        }
Exemple #5
0
        private static async Task <IEnumerable <ProductDTO> > ExtractProductsFromDefaultWalmart(string query)
        {
            try
            {
                //var doc = LoadHtmlFromLocalPath();
                var doc = GetHtmlFromWalmart(_UrlWithQuery, query);
                if (string.IsNullOrWhiteSpace(doc?.DocumentNode?.InnerHtml))
                {
                    QuisyDbRepository.AddLogAsync(LogType.Error, "No data from Walmart US: " + _UrlWithQuery + query);
                    return(Enumerable.Empty <ProductDTO>());
                }
                return(MapProducts(doc));
            }
            catch (Exception ex)
            {
                await QuisyDbRepository.AddLogAsync(LogType.Exception,
                                                    $"Exception at {nameof(WalmartWebScraper)}, method: {nameof(WalmartWebScraper.ExtractProductsFromDefaultWalmart)}. " +
                                                    $"Query: {query}. Message {ex.Message}");

                return(Enumerable.Empty <ProductDTO>());
            }
        }
Exemple #6
0
        public static async Task <IEnumerable <ProductDTO> > GetProductsByQueryAsync(string query)
        {
            try
            {
                var results = await HttpClientHelper.Get <SamsSearchDto>(_UrlSearch + query);

                if (results?.Response?.Products?.Any() != true)
                {
                    return(Enumerable.Empty <ProductDTO>());
                }
                var samsProducts = results?.Response?.Products;
                var products     = MapProducts(samsProducts);
                return(products);
            }
            catch (Exception ex)
            {
                await QuisyDbRepository.AddLogAsync(LogType.Exception,
                                                    $"Exception at {nameof(SamsWebApiScraper)}, method: {nameof(SamsWebApiScraper.GetProductsByQueryAsync)}. " +
                                                    $"Query: {query}. Message {ex.Message}");

                return(Enumerable.Empty <ProductDTO>());
            }
        }