--- title: GaucheでRSSの生成 author: kazu634 date: 2010-09-15 url: /2010/09/15/_1574/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5345;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---

前回までのところでは、「なんかリストを作るのが面倒くさいなぁ」と思ったのだが、よく考えたら quasi-quote を使えば問題ないことに気づく。こんな感じ:

(use sxml.serializer)
(define gen-rss
`(*TOP*
(*PI* xml "version=\"1.0\" encoding=\"UTF-8\"")
(rss (@ (version "2.0"))
,channel-example)))
(define channel-example
`(channel
(title "foobar")
(link "http://kazu634.tumblr.com/")
(description "Tumblr")
(lastBuildDate "Fri, 20 Jul 2007 19:00:00 +0900")
,items-example))
(define items-example
`(item (title "Post01")
(link "http://kazu634.tumblr.com/01")
(pubDate "Fri, 20 Jul 2007 19:00:00 +0900")))

実行例はこんな感じになる:

gosh>(print (srl:sxml->xml gen-rss))
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>foobar</title>
<link>http://kazu634.tumblr.com/</link>
<description>Tumblr</description>
<lastBuildDate>Fri, 20 Jul 2007 19:00:00 +0900</lastBuildDate>
<item>
<title>Post01</title>
<link>http://kazu634.tumblr.com/01</link>
<pubDate>Fri, 20 Jul 2007 19:00:00 +0900</pubDate>
</item>
</channel>
</rss>
#<undef>

なんだ簡単そうだぞ。

プログラミングGauche

プログラミングGauche