aboutsummaryrefslogtreecommitdiff
path: root/cmd/site/internal/jsonfeed/jsonfeed.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/site/internal/jsonfeed/jsonfeed.go')
-rw-r--r--cmd/site/internal/jsonfeed/jsonfeed.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/cmd/site/internal/jsonfeed/jsonfeed.go b/cmd/site/internal/jsonfeed/jsonfeed.go
new file mode 100644
index 0000000..913880d
--- /dev/null
+++ b/cmd/site/internal/jsonfeed/jsonfeed.go
@@ -0,0 +1,73 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/
+
+package jsonfeed
+
+import (
+ "encoding/json"
+ "io"
+ "time"
+)
+
+const CurrentVersion = "https://jsonfeed.org/version/1"
+
+type Item struct {
+ ID string `json:"id"`
+ URL string `json:"url"`
+ ExternalURL string `json:"external_url"`
+ Title string `json:"title"`
+ ContentHTML string `json:"content_html"`
+ ContentText string `json:"content_text"`
+ Summary string `json:"summary"`
+ Image string `json:"image"`
+ BannerImage string `json:"banner_image"`
+ DatePublished time.Time `json:"date_published"`
+ DateModified time.Time `json:"date_modified"`
+ Author Author `json:"author"`
+ Tags []string `json:"tags"`
+}
+
+type Author struct {
+ Name string `json:"name"`
+ URL string `json:"url"`
+ Avatar string `json:"avatar"`
+}
+
+type Hub struct {
+ Type string `json:"type"`
+ URL string `json:"url"`
+}
+
+type Attachment struct {
+ URL string `json:"url"`
+ MIMEType string `json:"mime_type"`
+ Title string `json:"title"`
+ SizeInBytes int64 `json:"size_in_bytes"`
+ DurationInSeconds int64 `json:"duration_in_seconds"`
+}
+
+type Feed struct {
+ Version string `json:"version"`
+ Title string `json:"title"`
+ HomePageURL string `json:"home_page_url"`
+ FeedURL string `json:"feed_url"`
+ Description string `json:"description"`
+ UserComment string `json:"user_comment"`
+ NextURL string `json:"next_url"`
+ Icon string `json:"icon"`
+ Favicon string `json:"favicon"`
+ Author Author `json:"author"`
+ Expired bool `json:"expired"`
+ Hubs []Hub `json:"hubs"`
+ Items []Item `json:"items"`
+}
+
+func Parse(r io.Reader) (Feed, error) {
+ var feed Feed
+ decoder := json.NewDecoder(r)
+ if err := decoder.Decode(&feed); err != nil {
+ return Feed{}, err
+ }
+ return feed, nil
+}