Example #1
0
        public IEnumerable <Car> GetAllCars(ModelSearchDto model, bool newCars)
        {
#if DEBUG
            Directory.CreateDirectory(@"./CarsBg/" + model.BrandName + "/" + model.Name);
#endif
            CarsBgSearchCriteria carsBgSearchCriteria = new CarsBgSearchCriteria();
            carsBgSearchCriteria.AddModel(model);

            var results = new List <Car>();
            logger.LogDebug("Exploring" + model.BrandName + " " + model.Name);

            while (true)
            {
                // CarsBg bugs and displays the 50 page for any page after 50
                if (carsBgSearchCriteria.Page > 50)
                {
                    break;
                }

                var url = carsBgSearchCriteria.ToString();

                WebPage carsPage = browser.NavigateToPage(new Uri(url));

                HtmlNodeCollection links = carsPage.Html.SelectNodes("//table[@class='tableListResults']//tr[contains(@class, 'odd') or contains(@class, 'even')]/td[2]/a");

                if (links == null || links.Count == 0)
                {
                    break;
                }

                foreach (HtmlNode link in links)
                {
                    string href  = link.GetAttributeValue("href");
                    string adUrl = $"https://www.cars.bg/{href}";

                    if (!existingCars.Contains(adUrl) && existingCars.Add(adUrl))
                    {
                        logger.LogDebug("Processing:" + adUrl);
                        Car car = GetCar(model, adUrl);
                        results.Add(car);
                    }
                    else if (newCars)
                    {
                        return(results);
                    }
                }

                carsBgSearchCriteria.Page++;
                logger.LogDebug("Exploring page number:" + carsBgSearchCriteria.Page);
            }

            return(results);
        }