/// <inheritdoc /> public async Task <ProviderWeatherForecastModel> GetWeatherForecastAsync(double latitude, double longitude, UnitsSystem units = UnitsSystem.Imperial, Language language = Language.English) { string unitsSystem = GetUnitsSystem(units); string languageValue = GetLanguage(language); string uri = $"{ServiceUri}/forecast/{SecretKey}/{latitude},{longitude}?" + $"exclude=minutely,hourly,daily,alerts,flags&units={unitsSystem}&lang={languageValue}"; var data = await GetResponseAsync <DarkSkyResponse>(uri).ConfigureAwait(false); return(new ProviderWeatherForecastModel { Coordinates = new Coordinates { Latitude = data.latitude, Longitude = data.longitude }, Temperature = data.currently.temperature, TemperatureMin = null, TemperatureMax = null, Humidity = data.currently.humidity, Pressure = data.currently.pressure, WindSpeed = data.currently.windSpeed, Summary = data.currently.summary, Language = language, Units = units, Provider = ServiceName }); }
/// <inheritdoc /> public async Task <ProviderWeatherForecastModel> GetWeatherForecastAsync(double latitude, double longitude, UnitsSystem units = UnitsSystem.Imperial, Language language = Language.English) { string unitsSystem = GetUnitsSystem(units); string languageValue = GetLanguage(language); string uri = $"{ServiceUri}/data/2.5/weather?appid={SecretKey}&lat={latitude}&lon={longitude}&" + $"units={unitsSystem}&lang={languageValue}"; var data = await GetResponseAsync <OpenWeatherMapResponse>(uri).ConfigureAwait(false); return(new ProviderWeatherForecastModel { Coordinates = new Coordinates { Latitude = data.coord.lat, Longitude = data.coord.lon }, Temperature = data.main.temp, TemperatureMin = data.main.temp_min, TemperatureMax = data.main.temp_max, Humidity = data.main.humidity, Pressure = data.main.pressure, WindSpeed = data.wind.speed, Summary = data.weather.FirstOrDefault().description, Language = language, Units = units, Provider = ServiceName }); }
protected string GetUnitsSystem(UnitsSystem units) { if (!UnitsSystemMappings.TryGetValue(units, out string temperatureScaleValue)) { throw new MappingNotFoundException($"Units system is not found for {units}. Service: {ServiceUri}."); } return(temperatureScaleValue); }
/// <inheritdoc /> public async Task <ServiceWeatherForecastModel> GetWeatherForecastAsync(double latitude, double longitude, UnitsSystem units = UnitsSystem.Imperial, Language language = Language.English) { _logger.LogInfo($"{nameof(GetWeatherForecastAsync)} was called with the following parameters: " + $"latitude={latitude}, longitude={longitude}, units={units}, language={language}"); var providerWeatherForecasts = new List <ProviderWeatherForecastModel>(); var avarageValues = new ProviderWeatherForecastModel(); foreach (var provider in _providers) { try { var providerWeatherForecast = await provider.GetWeatherForecastAsync(latitude, longitude, units, language); providerWeatherForecasts.Add(providerWeatherForecast); } catch (ResponseRetrievalException ex) { _logger.LogError($"Name: {provider.ServiceName}. Uri: {provider.ServiceUri}", ex); } catch (Exception ex) { _logger.LogError($"Weather forecast was not extracted for {provider.ServiceName}.", ex); throw; } } avarageValues.Temperature = providerWeatherForecasts.Average(p => p.Temperature); avarageValues.TemperatureMin = providerWeatherForecasts.Where(p => p.TemperatureMin.HasValue) .Average(p => p.TemperatureMin); avarageValues.TemperatureMax = providerWeatherForecasts.Where(p => p.TemperatureMax.HasValue) .Average(p => p.TemperatureMax); avarageValues.Humidity = providerWeatherForecasts.Average(p => p.Humidity); avarageValues.WindSpeed = providerWeatherForecasts.Average(p => p.WindSpeed); avarageValues.Pressure = providerWeatherForecasts.Average(p => p.Pressure); return(new ServiceWeatherForecastModel { Providers = providerWeatherForecasts, AvarageValues = avarageValues }); }
public async Task <IActionResult> GetWeatherForecast(double?latitude, double?longitude, UnitsSystem units = UnitsSystem.Imperial, Language language = Language.English) { _logger.LogInformation($"Request for weather forecast. Latitude={latitude}, longitude={longitude}, units={units}, language={language}"); if (!latitude.HasValue) { return(BadRequest("Latitude is not specified.")); } if (!longitude.HasValue) { return(BadRequest("Longitude is not specified.")); } var weatherForecast = await _weatherForecastService.GetWeatherForecastAsync( latitude.Value, longitude.Value, units, language); _logger.LogInformation($"Weather forecast: {JsonConvert.SerializeObject(weatherForecast)}"); return(Json(_mapper.Map <WeatherForecastModel>(weatherForecast))); }