|
|
@ -1,15 +1,21 @@ |
|
|
|
package main |
|
|
|
package main |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
|
|
"encoding/json" |
|
|
|
|
|
|
|
"fmt" |
|
|
|
|
|
|
|
"os" |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
type WeatherAPI struct { |
|
|
|
type WeatherAPI struct { |
|
|
|
Coord Coord `json:"coord"` |
|
|
|
Coord Coord `json:"coord"` |
|
|
|
Weather Weather `json:"weather` |
|
|
|
Weather []Weather `json:"weather"` |
|
|
|
Base string `json:"base"` |
|
|
|
Base string `json:"base"` |
|
|
|
Main Main `json:"main"` |
|
|
|
Main Main `json:"main"` |
|
|
|
Visability string `json:"visibility"` |
|
|
|
Visability int64 `json:"visibility"` |
|
|
|
Wind Wind `json:"wind"` |
|
|
|
Wind Wind `json:"wind"` |
|
|
|
Rain Rain `json:"rain"` |
|
|
|
Rain Rain `json:"rain"` |
|
|
|
Clouds Cloud `json:"cloud"` |
|
|
|
Clouds Cloud `json:"cloud"` |
|
|
|
dt DT `json:"dt"` |
|
|
|
DT int64 `json:"dt"` |
|
|
|
Sys Sys `json:"sys"` |
|
|
|
Sys Sys `json:"sys"` |
|
|
|
TimeZone int `json:"timezone"` |
|
|
|
TimeZone int `json:"timezone"` |
|
|
|
ID int `json:"id"` |
|
|
|
ID int `json:"id"` |
|
|
@ -18,7 +24,46 @@ type WeatherAPI struct { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type Coord struct { |
|
|
|
type Coord struct { |
|
|
|
//etc
|
|
|
|
Lon float64 `json:"lon"` |
|
|
|
|
|
|
|
Lat float64 `json:"lat"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Weather struct { |
|
|
|
|
|
|
|
ID int `json:"id"` |
|
|
|
|
|
|
|
Main string `json:"main"` |
|
|
|
|
|
|
|
Description string `json:"description"` |
|
|
|
|
|
|
|
Icon string `json:"icon"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Main struct { |
|
|
|
|
|
|
|
Temp float64 `json:"temp"` |
|
|
|
|
|
|
|
Feels_like float64 `json:"feels_like"` |
|
|
|
|
|
|
|
Temp_min float64 `json:"temp_min"` |
|
|
|
|
|
|
|
Temp_max float64 `json:"temp_max"` |
|
|
|
|
|
|
|
Pressure float64 `json:"pressure"` |
|
|
|
|
|
|
|
Humidity float64 `json:"humidity"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Wind struct { |
|
|
|
|
|
|
|
Speed float64 `json:"speed"` |
|
|
|
|
|
|
|
Deg float64 `json:"deg"` |
|
|
|
|
|
|
|
gust float64 `json:"gust"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Rain struct { |
|
|
|
|
|
|
|
T1h float64 `json:"1h"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Cloud struct { |
|
|
|
|
|
|
|
All int `json:"all"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Sys struct { |
|
|
|
|
|
|
|
Types int `json:"type"` |
|
|
|
|
|
|
|
Id int64 `json:"id"` |
|
|
|
|
|
|
|
Country string `json:"country"` |
|
|
|
|
|
|
|
Sunrise int64 `json:"sunrise"` |
|
|
|
|
|
|
|
Sunset int64 `json:"sunset"` |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
func main() { |
|
|
@ -26,7 +71,7 @@ func main() { |
|
|
|
//setting up openweathermap api
|
|
|
|
//setting up openweathermap api
|
|
|
|
lat := "56.122970" |
|
|
|
lat := "56.122970" |
|
|
|
lon := "-3.932390" |
|
|
|
lon := "-3.932390" |
|
|
|
city := "Stirling, uk" |
|
|
|
//city := "Stirling, uk"
|
|
|
|
api_key := "29e5139b86638988d333a28ba360bfd9" |
|
|
|
api_key := "29e5139b86638988d333a28ba360bfd9" |
|
|
|
full := "https://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + api_key + "" |
|
|
|
full := "https://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + api_key + "" |
|
|
|
fmt.Printf("\n------\nWeather url: %+s\n---------\n", full) |
|
|
|
fmt.Printf("\n------\nWeather url: %+s\n---------\n", full) |
|
|
@ -39,19 +84,41 @@ func main() { |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
panic(err) |
|
|
|
panic(err) |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
//print the html
|
|
|
|
//print the html
|
|
|
|
//fmt.Printf("%s\n", html)
|
|
|
|
//fmt.Printf("%s\n", html)
|
|
|
|
/* |
|
|
|
|
|
|
|
out, _ := json.Marshal(html) |
|
|
|
|
|
|
|
fmt.Printf("%s\n", out) |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
/* |
|
|
|
/* |
|
|
|
byteArray, error := json.MarshalIndent(html, "", " ") |
|
|
|
jsonFile, err := os.Open("stirling.json") |
|
|
|
if error != nil { |
|
|
|
// if we os.Open returns an error then handle it
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
fmt.Println(err) |
|
|
|
fmt.Println(err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fmt.Println("Successfully Opened stirling.json") |
|
|
|
|
|
|
|
defer jsonFile.Close() |
|
|
|
|
|
|
|
byteValue, _ := ioutil.ReadAll(jsonFile) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var data WeatherAPI |
|
|
|
|
|
|
|
|
|
|
|
fmt.Println(string(byteArray)) |
|
|
|
error := json.Unmarshal([]byte(byteValue), &data) |
|
|
|
|
|
|
|
if error != nil { |
|
|
|
|
|
|
|
fmt.Println(error) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//json.Unmarshal(byteValue, &data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println(data) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
data, _ := LoadConfiguration("./stirling.json") |
|
|
|
|
|
|
|
fmt.Println(data) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func LoadConfiguration(file string) (WeatherAPI, error) { |
|
|
|
|
|
|
|
var config WeatherAPI |
|
|
|
|
|
|
|
configFile, err := os.Open(file) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
fmt.Println(err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
jsonParser := json.NewDecoder(configFile) |
|
|
|
|
|
|
|
jsonParser.Decode(&config) |
|
|
|
|
|
|
|
return config, err |
|
|
|
} |
|
|
|
} |
|
|
|