/// <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); }
public PointModel AddPointMinRate(DateRates day) { return(new PointModel() { Value = day.Rates[0].GetPriceIntegerOrDefault(), Date = day.Date }); }
public PointModel AddPointRatesCounter(DateRates day) { int count = day.Rates.Where(rate => rate.Category != null).Count(); return(new PointModel() { Value = count, Date = day.Date }); }
/// <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); }
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 }); }