commit 441c3bcdcc1b984c1f0edfb3c74a441573dd3d88 from: Omar Polo date: Thu Nov 19 09:36:57 2020 UTC implementing the draft gemini feed format commit - 0ae518ce1867e6369d05fb920faf803eafd21c09 commit + 441c3bcdcc1b984c1f0edfb3c74a441573dd3d88 blob - 49ce9f72c03daca1f4bd3b129c88b555f1b056d3 blob + b3778b2f511415da3fb9fddb13b68469eb754eef --- src/blog/core.clj +++ src/blog/core.clj @@ -125,11 +125,14 @@ (viewfn tag posts))) (defn render-rss [] - (spit (str "resources/out/gemini/rss.xml") - (rss/feed #(str "gemini://gemini.omarpolo.com/post/" % ".gmi") - (->> @posts - (filter gemini-post) - (map #(dissoc % :body))))) + (let [gemposts (->> @posts + (filter gemini-post) + (map #(dissoc % :body)))] + (spit (str "resources/out/gemini/rss.xml") + (rss/feed #(str "gemini://gemini.omarpolo.com/post/" % ".gmi") + gemposts)) + (spit (str "resources/out/gemini/rss.gmi") + (gemini/feed-page gemposts))) (spit (str "resources/out/http/rss.xml") (rss/feed #(str "https://www.omarpolo.com/post/" % ".html") @posts))) blob - 30d1f39a9e4e027b5ab082b07246e8129cff4171 blob + e5628966368b1b9755ef2c6480b4a06e90c167b7 --- src/blog/gemini.clj +++ src/blog/gemini.clj @@ -3,6 +3,17 @@ [blog.time :as time] [blog.gemtext :as gemtext])) +(defn feed-page [posts] + (gemtext/unparse + (list + [:h1 "yumh"] + [:blockquote "Writing about things, sometimes"] + [:paragraph ""] + (for [post posts] + (let [{:keys [title date slug]} post + url (str "gemini://gemini.omarpolo.com/post/" slug ".gmi")] + [:link url (str (time/fmt-iso8601 date) " " title)]))))) + (defn with-page [_ & body] (gemtext/unparse (list blob - d1841ca09e58e2a83defde3f7c565fde34671af4 blob + 428495b3be602bd744157d2438495a5cf5635bf7 --- src/blog/time.clj +++ src/blog/time.clj @@ -22,6 +22,13 @@ (str (.format d pattern) " 00:00:00 GMT"))) +(defn fmt-iso8601 [d] + ;; quoted to indicate UTC, not TZ offset. Also, HH:mm is 00:00 + ;; because i'm parsing the raw date as LocalDate and not datetime, + ;; so there isn't the info about the hour and the minute. + (let [pattern (DateTimeFormatter/ofPattern "yyyy-MM-dd'T'00:00'Z'")] + (.format d pattern))) + (defn parse [s] (LocalDate/parse s pattern))