Weather app: http requests
This commit is contained in:
34
go-demo-5/geo/geo.go
Normal file
34
go-demo-5/geo/geo.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package geo
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type GeoData struct {
|
||||
City string `json:"city"`
|
||||
}
|
||||
|
||||
func GetMyLocation(city string) (*GeoData, error) {
|
||||
if city != "" {
|
||||
return &GeoData{
|
||||
City: city,
|
||||
}, nil
|
||||
}
|
||||
resp, err := http.Get("https://ipapi.co/json/")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, errors.New("NOT200")
|
||||
}
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var geo GeoData
|
||||
json.Unmarshal(body, &geo)
|
||||
return &geo, nil
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"demo/weather/geo"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
@@ -8,15 +9,16 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
// fmt.Println("Новый проект")
|
||||
// name := flag.String("name", "Archie", "Имя пользователя")
|
||||
// age := flag.Int("age", 49, "Возраст пользователя")
|
||||
|
||||
color.Green("__ПОГОДА__")
|
||||
city := flag.String("city", "", "Город пользователя")
|
||||
format := flag.Int("format", 1, "Формат вывода погоды")
|
||||
// format := flag.Int("format", 1, "Формат вывода погоды")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
fmt.Printf("Город: %s, формат: %d\n", *city, *format)
|
||||
fmt.Printf("Город: %s\n", *city)
|
||||
geoData, err := geo.GetMyLocation(*city)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
fmt.Println(*geoData)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user