mirror of
https://codeberg.org/andyscott/OpenWeather-gRPC-API.git
synced 2024-12-21 12:13:09 -05:00
Split zip and city lookups into separate functions
This commit is contained in:
parent
0446613088
commit
b924b8486f
1 changed files with 40 additions and 1 deletions
|
@ -9,6 +9,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
pb "codeberg.org/andcscott/OpenWeatherMap-gRPC-API/proto"
|
pb "codeberg.org/andcscott/OpenWeatherMap-gRPC-API/proto"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Coordinates struct {
|
type Coordinates struct {
|
||||||
|
@ -36,6 +38,7 @@ func (s *Server) Location(ctx context.Context, in *pb.RequestLocation) (*pb.Send
|
||||||
// Receives the city name and the server's API key
|
// Receives the city name and the server's API key
|
||||||
// Returns the latitude and longitude for the given location
|
// Returns the latitude and longitude for the given location
|
||||||
func getLocation(location string, key string) (float32, float32, error) {
|
func getLocation(location string, key string) (float32, float32, error) {
|
||||||
|
log.Println("'getLocation' function called...")
|
||||||
|
|
||||||
url := "http://api.openweathermap.org/geo/1.0/direct?q="
|
url := "http://api.openweathermap.org/geo/1.0/direct?q="
|
||||||
token := "&appid=" + key
|
token := "&appid=" + key
|
||||||
|
@ -59,5 +62,41 @@ func getLocation(location string, key string) (float32, float32, error) {
|
||||||
log.Printf("Error decoding geolocation JSON: %v\n", err)
|
log.Printf("Error decoding geolocation JSON: %v\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return coords[0].Latitude, coords[0].Longitude, err
|
if len(coords) < 1 {
|
||||||
|
return 0, 0, status.Error(codes.NotFound, "Location not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
return coords[0].Latitude, coords[0].Longitude, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getZipLocation(zip string, key string) (float32, float32, error) {
|
||||||
|
log.Println("'getZipLocation' function called...")
|
||||||
|
|
||||||
|
url := "https://api.openweathermap.org/geo/1.0/zip?zip="
|
||||||
|
token := "&appid=" + key
|
||||||
|
|
||||||
|
url = url + zip + token
|
||||||
|
|
||||||
|
res, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error fetching location: %v\n", err)
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error reading location: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
coords := Coordinates{}
|
||||||
|
err = json.Unmarshal(body, &coords)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error decoding geolocation JSON: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if coords.Latitude == 0 && coords.Longitude == 0 {
|
||||||
|
return 0, 0, status.Error(codes.NotFound, "Location not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
return coords.Latitude, coords.Longitude, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue