public IEnumerable <IWeatherItem> Get(string queryUrl, DateTime dateTime) { var baseUrl = _baseUrlProvider.Get(); var url = $"{baseUrl}{queryUrl}"; var htmlWeb = new HtmlWeb(); var document = htmlWeb.Load(url); var times = _timeExtractor.Extract(document.DocumentNode); var descriptions = _descriptionExtractor.Extract(document.DocumentNode); var temperatures = _temperatureExtractor.Extract(document.DocumentNode); var windSpeeds = _windSpeedExtractor.Extract(document.DocumentNode); var precipitations = _precipitationExtractor.Extract(document.DocumentNode); var weatherItems = times.Select(time => new WeatherItem(time, dateTime)).ToArray(); var descriptionIndex = 0; foreach (var description in descriptions) { weatherItems[descriptionIndex++].Description = description; } var temperatureIndex = 0; foreach (var temperature in temperatures) { var weatherItem = weatherItems[temperatureIndex++]; weatherItem.Celsius = temperature.Celsius; weatherItem.Fahrenheit = temperature.Fahrenheit; } var windSpeedIndex = 0; foreach (var windSpeed in windSpeeds) { var weatherItem = weatherItems[windSpeedIndex++]; weatherItem.MetersPerSecond = windSpeed.MetersPerSecond; weatherItem.MilesPerHour = windSpeed.MilesPerHour; weatherItem.KilometersPerHour = windSpeed.KilometersPerHour; } var precipitationIndex = 0; foreach (var precipitation in precipitations) { weatherItems[precipitationIndex++].Precipitation = precipitation; } return(weatherItems); }
private IEnumerable <ICityInfo> InternalGet() { var baseUrl = _baseUrlProvider.Get(); var htmlWeb = new HtmlWeb(); var document = htmlWeb.Load(baseUrl); var data = document.GetElementbyId("noscript"); foreach (var childNode in data.ChildNodes.Where(node => node.Name == "a")) { var cityUrl = childNode.GetAttributeValue("href", string.Empty); var cityName = childNode.GetAttributeValue("data-name", string.Empty); var id = childNode.GetAttributeValue("data-id", 0); yield return(new CityInfo(id, cityName, cityUrl)); } }