splitting into different files
This commit is contained in:
parent
0f32422d87
commit
951a4fac6f
191
main.go
191
main.go
@ -1,78 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"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 main() {
|
func main() {
|
||||||
//set up the flags for the program to use!
|
//set up the flags for the program to use!
|
||||||
var city, code, api_key string
|
var city, code, api_key string
|
||||||
@ -84,120 +17,24 @@ func main() {
|
|||||||
full := "https://api.openweathermap.org/data/2.5/weather?q=" + city + "," + code + "&units=metric" + "&appid=" + api_key + ""
|
full := "https://api.openweathermap.org/data/2.5/weather?q=" + city + "," + code + "&units=metric" + "&appid=" + api_key + ""
|
||||||
|
|
||||||
//read webpage
|
//read webpage
|
||||||
html, _ := loadWebPage(full)
|
html, err := loadWebPage(full)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("4xx error, please try again!")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
//Create file
|
//Create file
|
||||||
createFile(string(html), false)
|
createFile(string(html))
|
||||||
|
|
||||||
//Load the file
|
//Load the file
|
||||||
data, _ := loadJson("weather.json")
|
data, err := loadJson("weather.json")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Cannot load weather.json file!")
|
||||||
|
}
|
||||||
|
|
||||||
//Print the weather!
|
//Print the weather!
|
||||||
printWeather(data)
|
printWeather(data)
|
||||||
removeFile("weather.json", false)
|
|
||||||
}
|
//remove the file at the end
|
||||||
|
removeFile("weather.json")
|
||||||
func loadJson(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
|
|
||||||
}
|
|
||||||
|
|
||||||
func createFile(fileContents string, debugFlag bool) {
|
|
||||||
file, err := os.Create("weather.json")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed creating file: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
len, err := file.WriteString(fileContents)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed writing to file: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Debug Flag
|
|
||||||
if debugFlag {
|
|
||||||
fmt.Printf("\nFile Name: %s", file.Name())
|
|
||||||
fmt.Printf("\nLength: %d bytes", len)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func removeFile(file string, debugFlag bool) {
|
|
||||||
e := os.Remove(file)
|
|
||||||
if debugFlag {
|
|
||||||
fmt.Printf("Removing file: %s", file)
|
|
||||||
}
|
|
||||||
if e != nil {
|
|
||||||
log.Fatal(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadWebPage(web_url string) ([]byte, error) {
|
|
||||||
url := web_url
|
|
||||||
resp, err := http.Get(url)
|
|
||||||
//reads html as a slice of bytes
|
|
||||||
html, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return html, err
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func iconToEmoji(icon string) {
|
|
||||||
var em string
|
|
||||||
switch icon {
|
|
||||||
case "Clouds":
|
|
||||||
em = "☁️"
|
|
||||||
case "Drizzle":
|
|
||||||
em = "🌧️"
|
|
||||||
case "Rain":
|
|
||||||
em = "🌧️"
|
|
||||||
case "Snow":
|
|
||||||
em = "❄️"
|
|
||||||
case "Clear":
|
|
||||||
em = "☀️"
|
|
||||||
default:
|
|
||||||
em = "☀️"
|
|
||||||
}
|
|
||||||
fmt.Printf(em)
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
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"))
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user