Example #1
0
        static async Task Main(string[] args)
        {
            bool isWorked = true;

            while (isWorked)
            {
                Console.WriteLine("Вставьте относительный url отеля с букинга,\n" +
                                  "то что между 'booking.com/hotel/ru/' и '.html'");
                Console.WriteLine("Например: 'ra-nevskiy-44.ru'");
                string hotelNameInput = Console.ReadLine();
                var    hotel          = new URLSettings(hotelNameInput);

                DateTime dateFrom = dateSettings.GetDateTime("С какой даты начать? Введите в формате 'ГГГГ-ММ-ДД':");
                while (dateFrom < DateTime.Now)
                {
                    dateFrom = dateSettings.GetDateTime("Дата начала должна быть в будущем, йопта");
                }
                DateTime dateTo = dateSettings.GetDateTime("По какую дату будем смотреть? Введите в формате 'ГГГГ-ММ-ДД':");
                while (dateTo < dateFrom)
                {
                    dateTo = dateSettings.GetDateTime("Дата конца должна быть после даты начала, йопта");
                }

                int dateStep = dateSettings.GetInt("Введите шаг для выбора дат целым числом: \n" +
                                                   "Пы.Сы. При вводе '1' будет собирать цены с каждого дня подряд,\n " +
                                                   "что может быть долгим при большом периоде\n" +
                                                   "Пы.Сы.Сы. Когда-нибудь оптимизирую. Может быть. ))0");

                dateSettings parsingDates = new dateSettings(dateFrom, dateTo, dateStep);

                await StarterAsync(hotel, parsingDates); // основная программа

                Console.WriteLine("Желаете продолжить? Нажмите Y или N");
                ConsoleKey key = Console.ReadKey().Key;
                switch (key)
                {
                case ConsoleKey.N:
                    isWorked = false;
                    break;

                case ConsoleKey.Y:
                    continue;
                }
            }
            Console.WriteLine();
        }
Example #2
0
        public static async Task StarterAsync(URLSettings hotel, dateSettings dates)
        {
            var urlAddresses = hotel.getUrlsList(dates);
            var pricesList   = new List <List <List <string> > >();

            for (int i = 0; i < urlAddresses.Length; i++)
            {
                Console.WriteLine($"\nПроисходит магия... Страница: {i + 1}/{urlAddresses.Length}");
                var list_ = await PriceParser.GetPricesAsync(urlAddresses[i]);

                pricesList.Add(list_);
            }
            Console.WriteLine();
            Console.WriteLine($"Минимальные цены в выбранном отеле:");
            Console.WriteLine();
            Console.WriteLine($"ПыСы: если между отображаемыми датами больше 1 дня, \n" +
                              $"в этом диапазоне цены соответствуют ближайшему предыдущему значению.");
            Console.WriteLine();
            DateTime dateCount = dates.Start;

            for (int i = 0; i < pricesList.Count; i++)
            {
                try
                {
                    // Этот кусок определяет совпадения между датами идущими подряд
                    // Если данные совпадают с предыдущими, то скипает вывод и переходит к следующей дате
                    if (i != 0 && pricesList[i][0][0] == pricesList[i - 1][0][0] &&
                        pricesList[i][0][1] == pricesList[i - 1][0][1])
                    {
                        dateCount = dateCount.AddDays(dates.Step);
                        continue;
                    }
                    Console.Write("Цена на дату: " + dateCount.ToString("yyyy-MM-dd"));
                    Console.Write(pricesList[i][0][0] + pricesList[i][0][1]);
                    dateCount = dateCount.AddDays(dates.Step);
                }
                catch
                {
                    Console.WriteLine("\nВозникла ошибка, проверьте наличие цен на выбранные даты");
                    break;
                }
            }
        }