public void ParseCurrentWeather()
        {
            var input = GetResource("Input.OpenWeatherMap.weather.json");

            var provider = new OpenWeatherMapProvider();
            var day      = provider.ParseCurrentWeather(input);

            Assert.AreEqual(new DateTime(2019, 6, 4, 15, 52, 57), day.Date);
            Assert.AreEqual(day.Temperature.Celsius, 29.42, 0.01);
            Assert.AreEqual(WeatherCondition.FewClouds, day.Condition);
            Assert.AreEqual(RelativeHumidity.FromPercentage(0.6).Percentage, day.Humidity.Percentage, 0.1);
            Assert.IsNotNull(day.ApparentTemperature);

            var wind = day.Wind;

            Assert.AreEqual(Direction.East, wind.Direction);
            Assert.AreEqual(3.6, wind.Speed.KilometersPerHour, 0.1);
        }
        public WeatherDay ParseCurrentWeather(String jsonString)
        {
            var json    = JObject.Parse(jsonString);
            var main    = json["main"];
            var weather = json["weather"][0];
            var wind    = json["wind"];

            var result = new WeatherDay()
            {
                Date        = DateTimeOffset.FromUnixTimeSeconds(long.Parse(json["dt"].ToString())).DateTime,
                Temperature = Temperature.FromCelsius(double.Parse(main["temp"].ToString()) / 10),
                Humidity    = RelativeHumidity.FromPercentage(double.Parse(main["humidity"].ToString()) / 100),
                Condition   = OpenWeatherMapConditionParser.Parse(weather["icon"].ToString()),
                Wind        = ParseWind(wind)
            };

            result.ApparentTemperature = ApparentTemperatureCalculator.Calculate(result);
            return(result);
        }
        public List <WeatherDay> ParseForecast(String forecastString)
        {
            var forecast = JsonConvert.DeserializeObject <OwmForecast>(forecastString);
            var result   = new List <WeatherDay>();

            foreach (var day in forecast.list)
            {
                result.Add(new WeatherDay()
                {
                    Date        = DateTimeOffset.FromUnixTimeSeconds(day.dt).DateTime,
                    Condition   = OpenWeatherMapConditionParser.Parse(day.weather[0].icon),
                    Humidity    = RelativeHumidity.FromPercentage(day.main.humidity),
                    Temperature = Temperature.FromCelsius(day.main.temp / 10),
                    Wind        = new Wind()
                    {
                        Direction = DirectionParser.FromDegrees(day.wind.deg),
                        Speed     = Speed.FromKilometersPerHour(day.wind.speed)
                    }
                });
            }

            return(ForecastFilter.Filter(result));
        }