Browse Source

Add weather module

master
Elis Hirwing 2 years ago
parent
commit
99686a12d2
Signed by: etu <elis@hirwing.se> GPG Key ID: D57EFA625C9A925F
3 changed files with 70 additions and 0 deletions
  1. +4
    -0
      src/statusscreen/Config.go
  2. +62
    -0
      src/statusscreen/Weather.go
  3. +4
    -0
      status.sample.toml

+ 4
- 0
src/statusscreen/Config.go View File

@@ -11,4 +11,8 @@ type Config struct {
Clock struct {
TimeFormat string
}
Weather struct {
URL string
RefreshDelay int64
}
}

+ 62
- 0
src/statusscreen/Weather.go View File

@@ -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
}

+ 4
- 0
status.sample.toml View File

@@ -6,3 +6,7 @@ APIURL = "https://api.sl.se/api2/realtimedeparturesV4.json?key=%s&siteid=%d&time

[Clock]
TimeFormat = "15:04:05"

[Weather]
URL = "http://wttr.in/"
RefreshDelay = 1800

Loading…
Cancel
Save