Add weather module
parent
325eacbfdb
commit
99686a12d2
@ -0,0 +1,62 @@
|
||||
package statusscreen
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Weather is my Weather struct
|
||||
type Weather struct {
|
||||
Config *Config
|
||||
lastResponse string
|
||||
nextRefresh int64
|
||||
}
|
||||
|
||||
// GetOutput returns a rendered result of this module
|
||||
func (weather *Weather) GetOutput() []string {
|
||||
if weather.nextRefresh <= time.Now().Unix() {
|
||||
myWeather, err := weather.getWeather()
|
||||
|
||||
if err == nil {
|
||||
weather.lastResponse = myWeather
|
||||
weather.nextRefresh = time.Now().Unix() + weather.Config.Weather.RefreshDelay
|
||||
} else {
|
||||
// log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
return strings.Split(weather.lastResponse, "\n")
|
||||
}
|
||||
|
||||
func (weather *Weather) getWeather() (string, error) {
|
||||
// Set up http client to fetch weather
|
||||
client := &http.Client{
|
||||
Timeout: time.Second * 5,
|
||||
}
|
||||
|
||||
// Set up request
|
||||
req, err := http.NewRequest("GET", weather.Config.Weather.URL, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// Set curl user agent
|
||||
req.Header.Set("User-Agent", "curl/7.52.1")
|
||||
|
||||
// Do request
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return string(body), nil
|
||||
}
|
Loading…
Reference in New Issue