(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))