A few code improvements, turns out I didn't need an interface after all.

* Created a proper struct for the weather
* Created methods to the weather struct to handle weather requests
This commit is contained in:
Elia el Lazkani 2020-02-25 22:45:50 +01:00
parent f184474e60
commit ae431b71b5

49
main.go
View file

@ -293,18 +293,19 @@ func generateURL(domain string, v2 bool, location string, lang string, format st
return link, headers return link, headers
} }
// TODO: type weather struct {
// * Create interfaces to print and save and migrate code to them url string
// }
// Figure out if we need to print or download a PNG image
// and call the server accordingly.
func getWheather(url string, headers map[string]string, download bool) {
req, err := http.NewRequest("GET", url, nil) func (w weather) newRequest(headers map[string]string) *http.Request {
req, err := http.NewRequest("GET", w.url, nil)
if err != nil { if err != nil {
log.Fatal("Error reading request. ", err) log.Fatal("Error reading request. ", err)
} }
return w.formatHeader(req, headers)
}
func (w weather) formatHeader(req *http.Request, headers map[string]string) *http.Request {
req.Header.Set("Content-Type", "text/plain; charset=utf-8") req.Header.Set("Content-Type", "text/plain; charset=utf-8")
// I had to read the wttr.in code to figure this one out. // I had to read the wttr.in code to figure this one out.
// It wasn't Golang, it was 2 wasted hours that I won't be getting back. // It wasn't Golang, it was 2 wasted hours that I won't be getting back.
@ -313,7 +314,10 @@ func getWheather(url string, headers map[string]string, download bool) {
for key, value := range headers { for key, value := range headers {
req.Header.Add(key, value) req.Header.Add(key, value)
} }
return req
}
func (w weather) get(req *http.Request, download bool) {
client := &http.Client{} client := &http.Client{}
client.Jar = nil client.Jar = nil
@ -324,7 +328,22 @@ func getWheather(url string, headers map[string]string, download bool) {
defer resp.Body.Close() defer resp.Body.Close()
if download { if download {
splitURL := strings.Split(url, "/") w.download(resp)
} else {
w.print(resp)
}
}
func (w weather) print(resp *http.Response) {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal("Error reading body. ", err)
}
fmt.Printf("%s\n", body)
}
func (w weather) download(resp *http.Response) {
splitURL := strings.Split(w.url, "/")
filename := splitURL[len(splitURL)-1] filename := splitURL[len(splitURL)-1]
f, err := os.Create(filename) f, err := os.Create(filename)
@ -334,14 +353,14 @@ func getWheather(url string, headers map[string]string, download bool) {
defer f.Close() defer f.Close()
_, err = io.Copy(f, resp.Body) _, err = io.Copy(f, resp.Body)
} else { }
body, err := ioutil.ReadAll(resp.Body) // Wraper function around the weather struct
if err != nil { func getWheather(url string, headers map[string]string, download bool) {
log.Fatal("Error reading body. ", err)
} w := weather{url}
fmt.Printf("%s\n", body) req := w.newRequest(headers)
} w.get(req, download)
} }
// This is the main function that glues everything together. // This is the main function that glues everything together.