private IEnumerable <ExchangeRates> GetExchangeRatesFromSources(IEnumerable <ExchangeRateSource> exchangeRateSources, HtmlNode rootNode) { const string ExchangeRateDiv = "div.col-xs-12.gray-round-1px-border"; const string ExchangeRateSourceHeading = "h3#homeHeading"; const string ExchangeRateUpdateDateParagraph = "p.no-margin.full-width.black-text"; IEnumerable <HtmlNode> exchangeRateHtmlNodes = rootNode.CssSelect(ExchangeRateDiv); foreach (HtmlNode exchangeRateNode in exchangeRateHtmlNodes) { string exchangeRateSourceText = exchangeRateNode.CssSelect(ExchangeRateSourceHeading).First().InnerText; string updatedAtText = exchangeRateNode.CssSelect(ExchangeRateUpdateDateParagraph).First().InnerText; if (!_kinguilaHojeSourceMapper.CanMap(exchangeRateSourceText)) { continue; } ExchangeRateSource exchangeRateSource = _kinguilaHojeSourceMapper.Map(exchangeRateSourceText); if (!exchangeRateSources.Contains(exchangeRateSource)) { continue; } DateTimeOffset updatedAt = _pageTextualInformationParser.ParseDate(updatedAtText); IEnumerable <CurrencyRate> currencyRates = GetCurrencyRates(exchangeRateNode); yield return(new ExchangeRates(exchangeRateSource, updatedAt, currencyRates)); } }
public async Task <IEnumerable <ExchangeRates> > GetExchangeRateFromAllSources() { Uri kinguilaHojeUri = new Uri("http://www.kinguilahoje.com/"); ScrapingBrowser browser = new ScrapingBrowser(); WebPage kinguilaHomePage = await browser.NavigateToPageAsync(kinguilaHojeUri); return(GetExchangeRatesFromSources(ExchangeRateSource.GetAll(), kinguilaHomePage.Html)); }