briandowns / openweathermap

Go (golang) package for use with openweathermap.org's API.
Apache License 2.0
240 stars 70 forks source link

Forcast5 not returning 5 day forcast #86

Open vendion opened 4 years ago

vendion commented 4 years ago

Using the example provided in the repo requesting forcast data only returns 5 3 hour forcast datapoints rather than 5 days worth of data points.


go run ./weather.go -w Chattanooga -u f -l en -t forcast
Weather Forecast for Chattanooga:
Date & Time: 2020-06-15 18:00:00 +0000 UTC
Conditions:  Clouds scattered clouds
Temp:        75.43 
High:        78.39 
Low:         75.43

Date & Time: 2020-06-15 21:00:00 +0000 UTC
Conditions:  Clouds broken clouds
Temp:        75.7 
High:        76.55 
Low:         75.7

Date & Time: 2020-06-16 00:00:00 +0000 UTC
Conditions:  Clouds scattered clouds
Temp:        71.44 
High:        71.44 
Low:         71.37

Date & Time: 2020-06-16 03:00:00 +0000 UTC
Conditions:  Clear clear sky
Temp:        61.21 
High:        61.21 
Low:         61.12

Date & Time: 2020-06-16 06:00:00 +0000 UTC
Conditions:  Clear clear sky
Temp:        58.37 
High:        58.37 
Low:         58.37
```i
Is there a way to actually get the full 3 hour x 5 day dataset rather than just the next 15 hours?
donseba commented 4 years ago

According to the documentation it is : 5 day forecast includes weather data every 3 hours

so changing this :

func getForecast5(location, units, lang string) (*owm.Forecast5WeatherData, error) {
    w, err := owm.NewForecast("5", units, lang, os.Getenv("OWM_API_KEY"))
    if err != nil {
        return nil, err
    }
    w.DailyByName(location, 5)
    forecast := w.ForecastWeatherJson.(*owm.Forecast5WeatherData)
    return forecast, err
}

to

func getForecast5(location, units, lang string) (*owm.Forecast5WeatherData, error) {
    w, err := owm.NewForecast("5", units, lang, os.Getenv("OWM_API_KEY"))
    if err != nil {
        return nil, err
    }
    w.DailyByName(location, 99)
    forecast := w.ForecastWeatherJson.(*owm.Forecast5WeatherData)
    return forecast, err
}

note the 99 , this way there is no limit. since we get 7(or 8?) reports a day * 5 days , so 35 - 40 results.

You could loop over these results and only take the ones at a given timestamp.

so yes naming is a bit confusing but it can do what it has to do

vendion commented 4 years ago

Yes that does indeed work and I meant to add that passing a value other than 5 to DailyByName and the other similar functions does work, just the naming of that parameter is awkward due to how OWM's API functions.

If this is not a concern then this ticket can be closed.