From 03c467b836efcfcacca499518a2ba284bca299f6 Mon Sep 17 00:00:00 2001 From: Andinus Date: Mon, 16 Mar 2020 01:20:19 +0530 Subject: Rewrite apod response retrival --- cmd/cetus-bing/cetus-bing.go | 12 ++--- cmd/cetus-nasa/cetus-nasa.go | 106 +++++++++++++++++++++++-------------------- 2 files changed, 61 insertions(+), 57 deletions(-) (limited to 'cmd') diff --git a/cmd/cetus-bing/cetus-bing.go b/cmd/cetus-bing/cetus-bing.go index 871c96a..b8c397c 100644 --- a/cmd/cetus-bing/cetus-bing.go +++ b/cmd/cetus-bing/cetus-bing.go @@ -4,7 +4,6 @@ import ( "encoding/json" "flag" "fmt" - "log" "math/rand" "time" @@ -60,7 +59,7 @@ func main() { bpod := bpod{} err = json.Unmarshal([]byte(body), &bpod) - errChk("body unmarshal failed", err) + cetus.ErrChk("body unmarshal failed", err) // if random was set then bpodRes holds list of multiple // responses, choose a random response from the list @@ -72,7 +71,7 @@ func main() { // correct date format dt, err := time.Parse("20060102", bpodPhoto.startDate) - errChk("bpodPhoto.startDate parse failed", err) + cetus.ErrChk("bpodPhoto.startDate parse failed", err) bpodPhoto.startDate = dt.Format("2006-01-02") printDetails(bpodPhoto) @@ -83,7 +82,7 @@ func main() { } err = background.Set(bpodPhoto.url) - errChk("setting background failed", err) + cetus.ErrChk("setting background failed", err) } func parseFlags() { @@ -126,8 +125,3 @@ func bpodBody() (string, error) { body, err := bing.GetBpodJson(reqInfo, t) return body, err } - -func errChk(ctx string, err error) { - log.Println(ctx) - log.Fatal(err) -} diff --git a/cmd/cetus-nasa/cetus-nasa.go b/cmd/cetus-nasa/cetus-nasa.go index 495a308..fafd921 100644 --- a/cmd/cetus-nasa/cetus-nasa.go +++ b/cmd/cetus-nasa/cetus-nasa.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "flag" "fmt" "log" @@ -11,22 +12,31 @@ import ( "framagit.org/andinus/cetus/pkg/nasa" ) +type apod struct { + copyright string `json:"copyright"` + date string `json:"date"` + explanation string `json:"explanation"` + hdURL string `json:"hdurl"` + mediaType string `json:"media_type"` + serviceVersion string `json:"service_version"` + title string `json:"title"` + url string `json:"url"` + + code int `json:"code"` + msg string `json:"msg"` +} + var ( + t time.Duration + api string + date string + dump bool quiet bool + random bool + apiKey string version bool fetchOnly bool pathOnly bool - - api string - apiKey string - date string - random bool - dateHelp string - dateDefault string - timeout time.Duration - - err error - apodRes nasa.APOD ) func main() { @@ -38,22 +48,26 @@ func main() { } // Convert timeout to seconds - timeout = timeout * time.Second + t = t * time.Second if random { date = nasa.RandDate() } - // get response from api - apodRes, err = getAPODRes() - if err != nil { - if len(apodRes.Msg) != 0 { - log.Println("Message: ", apodRes.Msg) - } - log.Fatal(err) + body, err := apodBody() + if dump { + fmt.Println(body) + return } - printDetails(apodRes) + apod := apod{} + err = json.Unmarshal([]byte(body), &apod) + cetus.ErrChk("body unmarshal failed", err) + if len(apod.msg) != 0 { + log.Println("Message: ", apod.msg) + } + + printDetails(apod) // if fetchOnly is true then don't set background if fetchOnly { @@ -61,11 +75,9 @@ func main() { } // if media type is an image then set background - if apodRes.MediaType == "image" { - err = background.Set(apodRes.HDURL) - if err != nil { - log.Fatal(err) - } + if apod.mediaType == "image" { + err = background.Set(apod.hdURL) + cetus.ErrChk("setting background failed", err) } } @@ -74,8 +86,8 @@ func parseFlags() { flag.BoolVar(&quiet, "quiet", false, "No output") flag.BoolVar(&version, "version", false, "Cetus version") flag.BoolVar(&fetchOnly, "fetch-only", false, "Don't set background, only fetch info") - - dateHelp = fmt.Sprintf("Choose a random date between 1995-06-16 & %s", + flag.BoolVar(&dump, "dump", false, "Only dump received response") + dateHelp := fmt.Sprintf("Choose a random date between 1995-06-16 & %s", time.Now().UTC().Format("2006-01-02")) flag.BoolVar(&random, "random", false, dateHelp) flag.BoolVar(&pathOnly, "path-only", false, "Print only path of the image") @@ -83,42 +95,40 @@ func parseFlags() { flag.StringVar(&api, "api", "https://api.nasa.gov/planetary/apod", "APOD API URL") flag.StringVar(&apiKey, "api-key", "DEMO_KEY", "api.nasa.gov key for expanded usage") - dateDefault = time.Now().UTC().Format("2006-01-02") + dateDefault := time.Now().UTC().Format("2006-01-02") flag.StringVar(&date, "date", dateDefault, "Date of the APOD image to retrieve") - flag.DurationVar(&timeout, "timeout", 32*time.Second, "Timeout for http client in seconds") + flag.DurationVar(&t, "timeout", 32*time.Second, "Timeout for http client in seconds") flag.Parse() } -func printDetails(apodRes nasa.APOD) { +func printDetails(apod apod) { if quiet { return } if pathOnly { - cetus.PrintPath(apodRes.HDURL) + cetus.PrintPath(apod.hdURL) return } - fmt.Printf("Title: %s\n\n", apodRes.Title) - fmt.Printf("Copyright: %s\n", apodRes.Copyright) - fmt.Printf("Date: %s\n\n", apodRes.Date) - fmt.Printf("Media Type: %s\n", apodRes.MediaType) - if apodRes.MediaType == "image" { - fmt.Printf("URL: %s\n\n", apodRes.HDURL) + fmt.Printf("Title: %s\n\n", apod.title) + fmt.Printf("Copyright: %s\n", apod.copyright) + fmt.Printf("Date: %s\n\n", apod.date) + fmt.Printf("Media Type: %s\n", apod.mediaType) + if apod.mediaType == "image" { + fmt.Printf("URL: %s\n\n", apod.hdURL) } else { - fmt.Printf("URL: %s\n\n", apodRes.URL) + fmt.Printf("URL: %s\n\n", apod.url) } - fmt.Printf("Explanation: %s\n", apodRes.Explanation) + fmt.Printf("Explanation: %s\n", apod.explanation) } -func getAPODRes() (nasa.APOD, error) { - var apodInfo map[string]string - apodInfo = make(map[string]string) - apodInfo["api"] = api - apodInfo["apiKey"] = apiKey - apodInfo["date"] = date - - apodRes, err = nasa.APODPath(apodInfo, timeout) +func apodBody() (string, error) { + reqInfo := make(map[string]string) + reqInfo["api"] = api + reqInfo["apiKey"] = apiKey + reqInfo["date"] = date - return apodRes, err + body, err := nasa.GetApodJson(reqInfo, t) + return body, err } -- cgit 1.4.1-2-gfad0