WiLiKiソース解読:src/wiliki/rss.scm

WiLiKiソース解読:src/wiliki/rss.scm

 (select-module wiliki)
 ;; API
 (define (rss-page db)
  (rss-format (take* (wdb-recent-changes db) 15)))
 (define (rss-format entries)
  (let* ((self (wiliki))
         (full-url #`"http://,(server-name-of self),(script-name-of self)"))
    `("Content-type: text/xml\n\n"
      "<?xml version=\"1.0\" encoding=\"" ,(output-charset) "\" ?>\n"
      "<rdf:RDF
       xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
       xmlns=\"http://purl.org/rss/1.0/\"
       xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
      >\n"
      ,(rdf-channel
        full-url
        (rdf-title (top-page-of self))
        (rdf-link  full-url)
        (rdf-description (description-of self))
        (rdf-items-seq
         (map (lambda (entry) (rdf-li (url-full "~a" (cv-out (car entry)))))
              entries)))
      ,(map (lambda (entry)
              (let1 url (url-full "~a" (cv-out (car entry)))
                (rdf-item url
                          (rdf-title (car entry))
                          (rdf-link url)
                          (dc-date  (cdr entry)))))
            entries)
      "</rdf:RDF>\n")))
 ;; NB: these should be implemented within xml framework
 (define (rdf-channel about . content)
  `("<channel rdf:about=\"" ,(html-escape-string about) "\">"
    ,@content
    "\n</channel>\n"))
 (define (rdf-li resource)
  `("<rdf:li rdf:resource=\"" ,(html-escape-string resource) "\" />\n"))
 (define (rdf-simple tag . content)
  `("<" ,tag ">" ,@content "</" ,tag ">\n"))
 (define (rdf-item about . content)
  `("<item rdf:about=\"" ,(html-escape-string about) "\">"
    ,@content
    "</item>\n"))
 (define (rdf-items-seq . items)
  `("<items><rdf:Seq>" ,@items "</rdf:Seq></items>\n"))
 (define (rdf-simple-1 tag content)
  `("<" ,tag ">" ,(html-escape-string content) "</" ,tag ">\n"))
 (define (rdf-title title) (rdf-simple-1 "title" title))
 (define (rdf-link link) (rdf-simple-1 "link" link))
 (define (rdf-description desc) (rdf-simple-1 "description" desc))
 (define (dc-date secs)
  (rdf-simple-1 "dc:date"
                (sys-strftime "%Y-%m-%dT%H:%M:%S+00:00" (sys-gmtime secs))))
 (provide "wiliki/rss")

Last modified : 2003/03/24 07:23:45 UTC