You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-weather/weather.go

134 lines
3.2 KiB

package main
import (
"fmt"
"time"
"github.com/fatih/color"
)
type WeatherAPI struct {
Coord Coord `json:"coord"`
Weather []Weather `json:"weather"`
Base string `json:"base"`
Main Main `json:"main"`
Visability int64 `json:"visibility"`
Wind Wind `json:"wind"`
Rain Rain `json:"rain"`
Clouds Cloud `json:"cloud"`
DT int64 `json:"dt"`
Sys Sys `json:"sys"`
TimeZone int `json:"timezone"`
ID int `json:"id"`
Name string `json:"name"`
COD int `json:"cod"`
}
type Coord struct {
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 iconToEmoji(icon string) {
//info. from https://openweathermap.org/weather-conditions
var emoji string
switch icon {
case "Clouds":
emoji = "☁"
case "Drizzle":
emoji = "🌧"
case "Rain":
emoji = "🌧"
case "Snow":
emoji = "❄"
case "Clear":
emoji = "☀"
case "Mist":
emoji = "🌫"
case "Tornado":
emoji = "🌪"
case "Thunderstorm":
emoji = "⛈"
default:
emoji = "❓"
}
fmt.Print(emoji)
}
func printWeather(data WeatherAPI) {
weatherData := data
white := color.New(color.FgWhite)
boldWhite := white.Add(color.Bold)
dt := time.Now()
boldWhite.Println(dt.Format("01/02/2006 15:04"))
str_loc := weatherData.Name
str_code := weatherData.Sys.Country
str_weather := weatherData.Weather[0].Main
str_weather_detail := weatherData.Weather[0].Description
str_weather_icon := weatherData.Weather[0].Main
str_temp := weatherData.Main.Temp
str_temp_fl := weatherData.Main.Feels_like
str_temp_min := weatherData.Main.Temp_min
str_temp_max := weatherData.Main.Temp_max
str_sunset := time.Unix(weatherData.Sys.Sunset, 0)
str_sunrise := time.Unix(weatherData.Sys.Sunrise, 0)
//str_wind_speed := weatherData.Wind.Speed
boldWhite.Printf("📍Location: ")
fmt.Printf("%v, %v\n", str_loc, str_code)
boldWhite.Printf("Weather:")
iconToEmoji(str_weather_icon)
fmt.Printf(" %v (%v)\n", str_weather, str_weather_detail)
boldWhite.Printf("🌡 Temp: ")
fmt.Printf("%v°C (Feels like: %v°C)\n(Min: %v°C, Max: %v°C)\n", str_temp, str_temp_fl, str_temp_min, str_temp_max)
boldWhite.Printf("🌅Sunrise: ")
fmt.Printf("%v\t", str_sunrise.Format("15:04"))
boldWhite.Printf("🌇Sunset: ")
fmt.Printf("%v\n", str_sunset.Format("15:04"))
//fmt.Printf("Wind Speed: %vm/s", str_wind_speed)
}