summary refs log tree commit diff stats
path: root/pkg/bing/bpod.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/bing/bpod.go')
-rw-r--r--pkg/bing/bpod.go90
1 files changed, 90 insertions, 0 deletions
diff --git a/pkg/bing/bpod.go b/pkg/bing/bpod.go
new file mode 100644
index 0000000..5f425b0
--- /dev/null
+++ b/pkg/bing/bpod.go
@@ -0,0 +1,90 @@
+// 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 bing
+
+import (
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"time"
+)
+
+// Photo holds responses
+type Photo struct {
+	StartDate     string `json:"startdate"`
+	FullStartDate string `json:"fullstartdate"`
+	EndDate       string `json:"enddate"`
+	URL           string `json:"url"`
+	URLBase       string `json:"urlbase"`
+	Copyright     string `json:"copyright"`
+	CopyrightLink string `json:"copyrightlink"`
+	Title         string `json:"title"`
+	Hsh           string `json:"hsh"`
+}
+
+// BPOD  holds list of response
+type BPOD struct {
+	Photos []Photo `json:"images"`
+}
+
+// BPODPath returns Bing Photo of the Day responses
+func BPODPath(bpodInfo map[string]string, timeout time.Duration) (BPOD, error) {
+	var err error
+	bpodRes := BPOD{}
+
+	client := http.Client{
+		Timeout: time.Second * timeout,
+	}
+
+	req, err := http.NewRequest(http.MethodGet, bpodInfo["api"], nil)
+	if err != nil {
+		return bpodRes, err
+	}
+	q := req.URL.Query()
+	q.Add("format", "js")
+
+	// if random flag is passed then fetch 7 photos
+	if bpodInfo["random"] == "true" {
+		q.Add("n", "7")
+	} else {
+		q.Add("n", "1")
+	}
+	req.URL.RawQuery = q.Encode()
+
+	res, err := client.Do(req)
+
+	if err != nil {
+		return bpodRes, err
+	}
+	defer res.Body.Close()
+
+	resBody, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		return bpodRes, err
+	}
+
+	err = json.Unmarshal([]byte(resBody), &bpodRes)
+	if err != nil {
+		return bpodRes, err
+	}
+
+	if res.StatusCode != 200 {
+		return bpodRes, fmt.Errorf("Unexpected response status code received: %d %s",
+			res.StatusCode, http.StatusText(res.StatusCode))
+	}
+
+	return bpodRes, err
+}