From 50871fcd3f7698b5d3b68518aea12d31533c5c20 Mon Sep 17 00:00:00 2001 From: Andinus Date: Sat, 14 Mar 2020 19:10:01 +0530 Subject: Add cetus-nasa program cetus-nasa uses NASA's API to get Astronomy Picture of the Day. --- cmd/cetus-nasa/cetus-nasa.go | 105 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 cmd/cetus-nasa/cetus-nasa.go (limited to 'cmd') diff --git a/cmd/cetus-nasa/cetus-nasa.go b/cmd/cetus-nasa/cetus-nasa.go new file mode 100644 index 0000000..96b83fc --- /dev/null +++ b/cmd/cetus-nasa/cetus-nasa.go @@ -0,0 +1,105 @@ +// Copyright (c) 2020, Andinus + +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. + +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +package main + +import ( + "flag" + "fmt" + "log" + "time" + + "framagit.org/andinus/cetus/pkg" + "framagit.org/andinus/cetus/pkg/nasa" +) + +var ( + quiet bool + fetchOnly bool + + api string + apiKey string + date string + random bool + dateHelp string + dateDefault string + timeout time.Duration +) + +func main() { + var ( + picturePath string + apodRes nasa.APOD + err error + apodInfo map[string]string + ) + + dateHelp = fmt.Sprintf("Choose a random date between 1995-06-16 & %s", + time.Now().UTC().Format("2006-01-02")) + dateDefault = time.Now().UTC().Format("2006-01-02") + + parseFlags() + + // Convert timeout to seconds + timeout = timeout * time.Second + + if random { + date = nasa.RandDate() + } + + apodInfo = make(map[string]string) + apodInfo["api"] = api + apodInfo["apiKey"] = apiKey + apodInfo["date"] = date + + apodRes, err = nasa.APODPath(apodInfo, timeout) + if err != nil { + if len(apodRes.Msg) != 0 { + log.Println("Message: ", apodRes.Msg) + } + log.Fatal(err) + } + + if !quiet { + 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("URL: %s\n\n", apodRes.HDURL) + fmt.Printf("Explanation: %s\n", apodRes.Explanation) + } + + // if fetchOnly is true then don't set background + if fetchOnly { + return + } + picturePath = apodRes.HDURL + err = background.Set(picturePath) + if err != nil { + log.Fatal(err) + } +} + +func parseFlags() { + flag.BoolVar(&quiet, "quiet", false, "No output") + flag.BoolVar(&fetchOnly, "fetch-only", false, "Don't set background, only fetch info") + flag.BoolVar(&random, "random", false, dateHelp) + + 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") + 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.Parse() + +} -- cgit 1.4.1-2-gfad0