summaryrefslogtreecommitdiff
path: root/home/src
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
parent29b8b41111d30fe7aea9cb2dfa4c827ef9a79330 (diff)
Create RSS feedHEADmain
Diffstat (limited to 'home/src')
-rw-r--r--home/src/components.clj4
-rw-r--r--home/src/core.clj2
-rw-r--r--home/src/rss.clj45
3 files changed, 51 insertions, 0 deletions
diff --git a/home/src/components.clj b/home/src/components.clj
index d4d30a0..b35ee7c 100644
--- a/home/src/components.clj
+++ b/home/src/components.clj
@@ -7,6 +7,10 @@
[:html
{:style {:font-family "monospace"}}
[:head
+ [:link
+ {:rel "alternate"
+ :type "application/atom+xml"
+ :href "https://www.jakezerrer.com/feed.xml"}]
[:style
[:$
(str
diff --git a/home/src/core.clj b/home/src/core.clj
index b8ba344..368f491 100644
--- a/home/src/core.clj
+++ b/home/src/core.clj
@@ -1,5 +1,6 @@
(ns core
(:require [clojure.java.io :as io]
+ [rss :refer [emit]]
[pages :refer [pages e-404]]))
(defn clean []
@@ -20,6 +21,7 @@
target-file (io/file target-path)]
(io/make-parents target-file)
(spit target-file (str (page-fn)))))
+ (spit (io/file "target/html/feed.xml") (emit))
(spit (io/file "404.html") (str (e-404))))
(defn -main []
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))