diff options
author | nathansmith <nathansmith@posteo.com> | 2025-05-07 07:52:20 -0600 |
---|---|---|
committer | nathansmith <nathansmith@posteo.com> | 2025-05-07 07:52:20 -0600 |
commit | ad77b98eb20b1abec23940a14512e07255b222ef (patch) | |
tree | 09dc1a085860259a7fea29fe1f6ccddad11874eb /blog/generate_feed.scm | |
parent | dcaff06b3c7470e1ec3cf878d9322e589703cbd5 (diff) |
Switching over to guile
Diffstat (limited to 'blog/generate_feed.scm')
-rwxr-xr-x | blog/generate_feed.scm | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/blog/generate_feed.scm b/blog/generate_feed.scm new file mode 100755 index 0000000..0084dc9 --- /dev/null +++ b/blog/generate_feed.scm @@ -0,0 +1,64 @@ +#! /usr/bin/guile \ +-e main -s +!# + +(use-modules (sxml simple)) + +;; 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>http://nathansmith117.beevomit.org/blog#~a</link>\n\ + <pubDate>~a</pubDate>\n\ + <description>\n" title name pub-date) + (get-description file) + (display " </description>\n") + (display " </item>\n"))) + +;; Generate rss feed +(define (generate-feed) + ;; Display the rss header + (display "<?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>http://nathansmith117.beevomit.org/blog</link>\n\ + <image>\n\ + <url>http://nathansmith117.beevomit.org/images/icon.png</url>\n\ + <title>Nathan's shitty blog</title>\n\ + <link>http://nathansmith117.beevomit.org/blog</link>\n\ + </image>\n") + + (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)) + |