From ba7e27dfeaa3e09c89c1062c8a5f8ba29aa87e99 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Tue, 26 Jul 2022 19:41:53 -0400 Subject: [PATCH] Internal getLocation function added --- server/location.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/server/location.go b/server/location.go index c9dcf1c..6186782 100644 --- a/server/location.go +++ b/server/location.go @@ -16,6 +16,8 @@ type Coordinates struct { Longitude float32 `json:"lon"` } +// Receives a gRPC request for Location +// Returns a SendLocation message with the Latitude and Longitude func (s *Server) Location(ctx context.Context, in *pb.RequestLocation) (*pb.SendLocation, error) { log.Println("'Location' function called...") @@ -47,3 +49,33 @@ func (s *Server) Location(ctx context.Context, in *pb.RequestLocation) (*pb.Send Longitude: coords[0].Longitude, }, nil } + +// Used internally to fetch precise locations for Current and Extended +// Receives gRPC requests as an interface +// Returns the latitude (float32) and longitude (float32) for a given location +func getLocation(msg interface{}) (float32, float32) { + + url := "http://api.openweathermap.org/geo/1.0/direct?q=" + city := in.City + token := "&appid=" + os.Getenv("API_KEY") + + url = url + city + 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 JSON: %v\n", err) + } + return coords[0].Latitude, coords[0].Longitude +}