aboutsummaryrefslogtreecommitdiff
path: root/org/blog/generate-feed.scm
diff options
context:
space:
mode:
Diffstat (limited to 'org/blog/generate-feed.scm')
-rwxr-xr-xorg/blog/generate-feed.scm66
1 files changed, 66 insertions, 0 deletions
diff --git a/org/blog/generate-feed.scm b/org/blog/generate-feed.scm
new file mode 100755
index 0000000..8519f0c
--- /dev/null
+++ b/org/blog/generate-feed.scm
@@ -0,0 +1,66 @@
+#! /usr/bin/guile \
+-e main -s
+!#
+
+(use-modules (sxml simple))
+
+(define site-url "https://shittyweb.org")
+
+;; Generate description from article file
+(define (get-description file)
+ (call-with-input-file file
+ (lambda (fp)
+ (letrec ((read-characters
+ (lambda (fp)
+ (let ((character (read-char fp)))
+ (unless (eof-object? character)
+ (display character)
+ (read-characters fp))))))
+ (display "<![CDATA[\n")
+ (read-characters fp)
+ (display "]]>\n")))))
+
+;; Generate rss item
+(define (make-item article)
+ (let ((title (cadr (list-ref article 0)))
+ (name (cadr (list-ref article 2)))
+ (pub-date (cadr (list-ref article 4)))
+ (file (cadr (list-ref article 6))))
+ (format #t "\n <item>\n\
+ <title>~a</title>\n\
+ <link>~a/blog#~a</link>\n\
+ <pubDate>~a</pubDate>\n\
+ <description>\n" title site-url name pub-date)
+ (get-description file)
+ (display " </description>\n")
+ (display " </item>\n")))
+
+;; Generate rss feed
+(define (generate-feed)
+ ;; Display the rss header
+ (format #t "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n\
+<rss version=\"2.0\">\n\
+ <channel>\n\
+ <title>Nathan's shitty blog</title>\n\
+ <description>The coffee powered blog of chaos</description>\n\
+ <link>~a</link>\n\
+ <image>\n\
+ <url>~a/images/icon.png</url>\n\
+ <title>Nathan's shitty blog</title>\n\
+ <link>~a/blog</link>\n\
+ </image>\n" site-url site-url site-url)
+
+ (call-with-input-file "articles.xml"
+ (lambda (fp)
+ (let ((articles (xml->sxml fp)))
+ (for-each (lambda (article)
+ (if (list? article)
+ (make-item (cddr article))))
+ (cdr (cadr articles))))))
+
+ (display " </channel>\n")
+ (display "</rss>\n"))
+
+(define (main args)
+ (generate-feed))
+