#! /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))