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

65
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,26 +328,41 @@ 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)
filename := splitURL[len(splitURL)-1]
f, err := os.Create(filename)
if err != nil {
return
}
defer f.Close()
_, err = io.Copy(f, resp.Body)
} else { } else {
w.print(resp)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal("Error reading body. ", err)
}
fmt.Printf("%s\n", body)
} }
} }
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]
f, err := os.Create(filename)
if err != nil {
return
}
defer f.Close()
_, err = io.Copy(f, resp.Body)
}
// Wraper function around the weather struct
func getWheather(url string, headers map[string]string, download bool) {
w := weather{url}
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.
func main() { func main() {
var params cmdParams = cmdParams{} var params cmdParams = cmdParams{}