--- title: GaucheでRSSの生成 author: kazu634 date: 2010-09-15 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>
なんだ簡単そうだぞ。