The data are public [1]. Dark Sky et al process and repackage those data, along with their own analytics and UI.
The data are public [1]. Dark Sky et al process and repackage those data, along with their own analytics and UI.
Perhaps they expanded into repackaging NOAA data now, but that's not what Dark Sky is about.
I work on a related app to do that barometer data on Android: https://play.google.com/store/apps/details?id=com.allclearwe... (US only for now).
They used an ML/statistical approach to forecasting, rather than physical modeling. They had some secret sauce in doing fast ML on phones, before libraries like CoreML existed.
AccuWeather has been doing that for ages with MinuteCast. Dark Sky just looked more 21st century and was better marketed, probably
DarkSky - Nov 2011 - https://www.kickstarter.com/projects/jackadam/dark-sky-hyper...
MinuteCast - Mar 2014 - https://www.accuweather.com/en/press/24293762
That is, it's the exact opposite. MinuteCast is a rip of DarkSky.
See https://www.cnn.com/2017/10/14/politics/noaa-nominee-accuwea...
https://www.weather.gov/documentation/services-web-api
You can turn lat/long into a grid point:
https://api.weather.gov/points/39.7456,-97.0892
Then a grid point into a forecast:
https://api.weather.gov/gridpoints/TOP/31,80/forecast
If you have your own GIS you can presumably store the grid points yourself.
How did you get JSON? When I was looking I could only find XML, which I wasn't willing to deal with.
Shame it's US only...
But I wanted precipitation data so I had to use this endpoint: https://api.weather.gov/gridpoints/TOP/31,80
That endpoint groups hour-by-hour forecasts (see below) together to deduplicate data, but it makes it very painful to parse. For instance, "2020-03-31T15:00:00+00:00/PT4H" means that value is valid for 4 hours beginning at 2020-03-31T15:00:00+00:00. The durations varied from time interval to time interval and it made it super annoying to parse through.
{ "validTime": "2020-03-31T15:00:00+00:00/PT4H", "value": 0 }, { "validTime": "2020-03-31T19:00:00+00:00/PT1H", "value": 2 }, { "validTime": "2020-03-31T20:00:00+00:00/PT3H", "value": 4 },