summaryrefslogtreecommitdiff
path: root/home/src/rss.clj
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-12-04 10:53:09 -0500
committerJake Zerrer <him@jakezerrer.com>2025-12-08 11:21:21 -0500
commit70f2c8b0ae6e7913d4349156947f01cfdb83757e (patch)
tree8a5e76478fa6b989e47efed3e27b55a773073f99 /home/src/rss.clj
parent29b8b41111d30fe7aea9cb2dfa4c827ef9a79330 (diff)
Create RSS feedHEADmain
Diffstat (limited to 'home/src/rss.clj')
-rw-r--r--home/src/rss.clj45
1 files changed, 45 insertions, 0 deletions
diff --git a/home/src/rss.clj b/home/src/rss.clj
new file mode 100644
index 0000000..6a8072e
--- /dev/null
+++ b/home/src/rss.clj
@@ -0,0 +1,45 @@
+(ns rss
+ (:require [clojure.data.xml :as xml])
+ (:import [java.time ZonedDateTime ZoneId]
+ [java.time.format DateTimeFormatter]))
+
+(def title "Jake's Blog")
+
+(defn fmt [year month day zone]
+ (.format (ZonedDateTime/of year month day 0 0 0 0 (ZoneId/of zone)) (DateTimeFormatter/ISO_OFFSET_DATE_TIME)))
+
+(defn entries []
+ (sorted-map
+ [2025 10 8 "America/New_York"]
+ {:title "Quotes from The Second Sex"
+ :path "second-sex-quotes"
+ :summary "My favorite quotes from Simone de Beauvior's \"The Second Sex\""}))
+
+(defn feed []
+ (xml/element
+ :feed {:xmlns "http://www.w3.org/2005/Atom"}
+ (xml/element :id {} "https://www.jakezerrer.com/feed.atom")
+ (xml/element :title {} title)
+ ;; TODO: Updated
+ (xml/element :updated {} (apply fmt (first (last (entries)))))
+ (xml/element
+ :author
+ {}
+ (xml/element :name {} "Jake Zerrer"))
+ (xml/element :link {:rel "self" :href "https://www.jakezerrer.com/feed.atom"})
+ (for [[updated {:keys [title path summary]}] (entries)]
+ (let [[year month day zone] updated]
+ (xml/element
+ :entry
+ {}
+ (xml/element :id {} (str "https://www.jakezerrer.com/" path))
+ (xml/element :title {} title)
+ (xml/element :updated {} (fmt year month day zone))
+ (xml/element :link {:rel "alternate" :href (str "https://www.jakezerrer.com/" path)})
+ (xml/element :summary {} summary))))))
+
+(defn emit []
+ (xml/emit-str (feed)))
+
+(comment
+ (emit))