diff options
Diffstat (limited to 'nws/nws.go')
-rw-r--r-- | nws/nws.go | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -92,6 +92,7 @@ type ForecastBundle struct { var pCache *cache.Cache var fCache *cache.Cache var fhCache *cache.Cache +var aCache *cache.Cache var baseUrl *url.URL func init() { @@ -100,6 +101,7 @@ func init() { pCache = cache.NewCache() fCache = cache.NewCache() fhCache = cache.NewCache() + aCache = cache.NewCache() // Parse NWS base url. baseUrl, err = url.Parse("https://api.weather.gov") @@ -270,19 +272,28 @@ func GetAlerts(lat, lng float32) (fc *FeatureCollection, err *Error) { return } + // Point: lat,lng. + ll := fmt.Sprintf("%.4f,%.4f", lat, lng) + // Build query. q := url.Values{} q.Add("status", "actual") q.Add("message_type", "alert") - q.Add("point", fmt.Sprintf("%.4f,%.4f", lat, lng)) + q.Add("point", ll) q.Add("urgency", "Immediate,Expected") q.Add("certainty", "Observed,Likely,Possible") u.RawQuery = q.Encode() // Hit it. - body, _, err := get(u.String()) - if err != nil { - return + var expires time.Time + var body []byte + if body = aCache.Get(ll); len(body) == 0 { + body, expires, err = get(u.String()) + if err != nil { + return + } + // Cache it. + aCache.Set(ll, body, expires) } // Unmarshal. |