示例#1
0
        public async Task <WeatherForecastModel> GetForecast(string cityId, string zipCode)
        {
            _logger.LogDebug($"Getting forecasts for city ID = {cityId} and zipcode = {zipCode}");

            //OpenWeatherMap: We recommend making calls to the API no more than one time every 10 minutes for one location
            //let's cache the response for 10 minutes
            WeatherForecastModel weatherForecast;

            if (!_cache.TryGetValue(String.Format(WeatherCache, cityId, zipCode), out weatherForecast))
            {
                _logger.LogDebug($"Missing cache for city ID = {cityId} and zipcode = {zipCode}");

                WeatherForecastModel sixDayForecast = await GetSixDayForecast(cityId, zipCode);

                //sometimes (after 23.00) the openweathermap api returns five next days but not today
                //in that case we fill the today's value from another endpoint
                if (sixDayForecast?.Forecasts.Count() < 6)
                {
                    AveragedDayForecastModel currentForecast = await GetCurrentForecast(cityId, zipCode);

                    sixDayForecast.Forecasts.Insert(0, currentForecast);
                }

                weatherForecast = sixDayForecast;
                _cache.Set(string.Format(WeatherCache, cityId, zipCode), sixDayForecast, TimeSpan.FromMinutes(10));
            }

            return(weatherForecast);
        }
示例#2
0
        private List <AveragedDayForecastModel> GetAveragedSixDayForecast(SixDayForecast fiveDayForecast)
        {
            var retval         = new List <AveragedDayForecastModel>();
            var daysOfForecast = fiveDayForecast.DailyForecastList.Select(x => DateTime.Parse(x.DateTimeText).Date).Distinct();

            foreach (var day in daysOfForecast)
            {
                var dayForecasts        = fiveDayForecast.DailyForecastList.Where(x => DateTime.Parse(x.DateTimeText).Date == day);
                var averagedDayForecast = new AveragedDayForecastModel()
                {
                    Date                = day,
                    AveragedHumidity    = dayForecasts.Average(x => x.WeatherConditions.Humidity),
                    AveragedTemperature = dayForecasts.Average(x => x.WeatherConditions.Temperature),
                    AveragedWind        = dayForecasts.Average(x => x.WindStats.Speed)
                };
                retval.Add(averagedDayForecast);
            }

            return(retval);
        }