From 947c3c0c438ddf137d052bfd2ee9af53efc9f173 Mon Sep 17 00:00:00 2001 From: raul Date: Fri, 3 May 2024 09:24:00 +0200 Subject: [PATCH] Fetch basic weather info from AEMET --- main.go | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 854a761..099f1ba 100644 --- a/main.go +++ b/main.go @@ -1,17 +1,51 @@ package main import ( + "encoding/json" "fmt" + xj "github.com/basgys/goxml2json" "io" "log" "net/http" + "strings" ) +type root struct { + Base struct { + Nombre string `json:"nombre"` + Prediccion struct { + Dia []struct { + Fecha string `json:"-fecha"` + Temperatura struct { + Maxima string `json:"maxima"` + Minima string `json:"minima"` + } + } + } + } `json:"root"` +} + func main() { + jsonData := getJSON() + textBytes := []byte(jsonData) + aemetRequest := root{} + err := json.Unmarshal(textBytes, &aemetRequest) + if err != nil { + log.Fatalf("Error occurred unmarshalling data: %v\n", err) + } + + fmt.Println(aemetRequest.Base.Nombre) + fmt.Println(aemetRequest.Base.Prediccion.Dia[0].Fecha) + fmt.Println(aemetRequest.Base.Prediccion.Dia[0].Temperatura.Maxima) + fmt.Println(aemetRequest.Base.Prediccion.Dia[0].Temperatura.Minima) +} + +func getJSON() string { resp, err := http.Get("https://www.aemet.es/xml/municipios/localidad_46250.xml") if err != nil { log.Fatalf("Error occurred pulling data: %v\n", err) } + defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Fatalf("Error occurred accessing website: %v\n", err) @@ -22,5 +56,11 @@ func main() { log.Fatalf("Error occurred reading data: %v\n", err) } - fmt.Print(string(data)) + xml := strings.NewReader(string(data)) + json, err := xj.Convert(xml) + if err != nil { + log.Fatalf("Error occurred converting XML to JSON: %v\n", err) + } + + return json.String() }