summary refs log tree commit diff stats
path: root/cmd/cetus-nasa
diff options
context:
space:
mode:
authorAndinus <andinus@inventati.org>2020-03-14 19:10:01 +0530
committerAndinus <andinus@inventati.org>2020-03-14 19:10:01 +0530
commit50871fcd3f7698b5d3b68518aea12d31533c5c20 (patch)
treec547b1932a3422e5372d4b4f422d4628000b6cbb /cmd/cetus-nasa
parenta7e66bc241524caf1accf02966c76f436fa19210 (diff)
downloadcetus-50871fcd3f7698b5d3b68518aea12d31533c5c20.tar.gz
Add cetus-nasa program v0.4.0
cetus-nasa uses NASA's API to get Astronomy Picture of the Day.
Diffstat (limited to 'cmd/cetus-nasa')
-rw-r--r--cmd/cetus-nasa/cetus-nasa.go105
1 files changed, 105 insertions, 0 deletions
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 <andinus@inventati.org>
+
+// 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()
+
+}