Beispiel #1
0
        /// <summary>
        /// Создаёт и заполняет экземпляр "DateRates" данными из DOM исходника
        /// </summary>
        /// <param name="document"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        private DateRates GetDateRates(IDocument document, UrlModel url)
        {
            var       blocks = GetParseElements(in document, "tr", "js-rt-block-row "); // получаем блоки с категориями номеров и ценами
            DateRates result = new DateRates(url.ParentLink, url.Date);

            if (blocks.Count() == 0)
            {
                result.WithoutAnyRate();
                return(result);
            }
            foreach (var item in blocks)
            {
                var priceLine = new Rate();
                // парсим названия категорий
                var category = GetParseElements(in item, "span", "hprt-roomtype-icon-link ");
                foreach (var _item in category)
                {
                    priceLine.Category = _item.TextContent.Trim();
                }
                // парсим цены
                var price = GetParseElements(in item, "div", "bui-price-display__value prco-inline-block-maker-helper prco-f-font-heading ");
                foreach (var _item in price)
                {
                    priceLine.Price = _item.TextContent.Trim();
                }
                var meal = GetParseElements(in item, "li", "jq_tooltip  rt_clean_up_options");
                foreach (var _item in meal)
                {
                    priceLine.Meal = _item.TextContent.Trim();
                }
                result.Rates.Add(priceLine);
            }
            return(result);
        }
Beispiel #2
0
 public PointModel AddPointMinRate(DateRates day)
 {
     return(new PointModel()
     {
         Value = day.Rates[0].GetPriceIntegerOrDefault(),
         Date = day.Date
     });
 }
Beispiel #3
0
        public PointModel AddPointRatesCounter(DateRates day)
        {
            int count = day.Rates.Where(rate => rate.Category != null).Count();

            return(new PointModel()
            {
                Value = count,
                Date = day.Date
            });
        }
Beispiel #4
0
        /// <summary>
        /// Создаёт массив "DateRates" и заполняет его с помощью .AsParsllel. Отображает процесс на прогрессбар.
        /// </summary>
        /// <param name="progressBar"></param>
        /// <param name="urls"></param>
        /// <returns></returns>
        public async Task <DateRates[]> GetRatesOnDatesAsync(ProgressBarModel progressBar, params UrlModel[] urls)
        {
            var pricesList = new DateRates[urls.Length];

            await Task.WhenAll(
                urls.AsParallel().Select(async(url, index) =>
            {
                var domDocument    = await GetDomPageAsync(url.Link);
                pricesList[index]  = GetDateRates(domDocument, url);
                progressBar.Value += 1;
            }));

            return(pricesList);
        }
Beispiel #5
0
        public PointModel AddPointRatesCountPercent(DateRates day)
        {
            if (MaxCountCategory == 0)
            {
                return(new PointModel());
            }

            int count = day.Rates.Where(rate => rate.Category != null).Count();

            return(new PointModel()
            {
                Value = (int)(count / MaxCountCategory * 100),
                Date = day.Date
            });
        }