예제 #1
0
        public async Task <IEnumerable <Product> > Search(
            [FromServices] IRepository <Models.Store, int> storeRepository,
            [FromServices] IMultiEntityScraper <Models.Product> productsScraper,
            string keywords)
        {
            var keywordList = keywords.Split(',', ';').Select(s => s.Trim()).Where(s => !string.IsNullOrWhiteSpace(s))
                              .ToList();
            var products = new List <Product>();

            foreach (var storedStore in storeRepository.All())
            {
                if (storedStore.IsEnabled)
                {
                    foreach (var keyword in keywordList)
                    {
                        var url = storedStore.Url.Replace(
                            "/Products?depPid=0",
                            $"/Search.aspx?keywords={keyword}&depPid=0");
                        await foreach (var product in productsScraper.GetAsync(url, true))
                        {
                            products.Add(product.ToDataTransferObject(false, false));
                        }
                    }
                }
            }

            return(products);
        }
예제 #2
0
        public async Task <IEnumerable <Department> > GetDepartments(
            [FromServices] IRepository <Models.Store, int> storeRepository,
            [FromServices] IRepository <Models.Department, int> productRepository,
            [FromServices] IMultiEntityScraper <Models.Department> departmentScraper,
            int id)
        {
            var departments = new List <Department>();

            var storedDepartment = storeRepository.Find(department => department.Id == id).FirstOrDefault();

            if (storedDepartment != null)
            {
                var scrappedDepartments = departmentScraper.GetAsync(storedDepartment.Url);
                await foreach (var department in scrappedDepartments)
                {
                    var productUrl = department.Url;
                    var stored     = productRepository.Contains(p => p.Url == productUrl);
                    departments.Add(department.ToDataTransferObject(stored: stored));
                }
            }

            return(departments);
        }