プログラミングGauche読了

2008–06–02

今年のLanguage of the Yearは Gaucheなんです。 そんなわけで プログラミングGauche 読了

Scalaをやってみて、もうちょっと関数型言語に特化した言語を学ばないとと思ったのが去年の終わり。 ちょうど SICP を読むのがはやってた頃ってのもあって、Scheme処理系のGauche をチョイスした。 それ以降だらだらとスクリプトを組んだりしてたんだけど、プログラミングGauche が出たのをきっかけに腰を落ち着けてじっくり取り組む事にした。

という訳で恥をしのびつつ初晒し。 GoogleサイトマップにあるURLについて、はてなBookmarkのユーザ数を取得するスクリプト

 #!/usr/bin/env gosh

 (use rfc.uri)
 (use rfc.http)
 (use xsm.xml-rpc.client)
 (use sxml.ssax)

 (define *host* "b.hatena.ne.jp")
 (define *port* 80)
 (define *path* "/xmlrpc")

 ;; パラメータ
 ;;    第一引数  ホスト名
 ;;    第二引数  サイトマップへのパス
 (define (main args)
   (let ((server (make-xml-rpc-client (uri-compose :scheme "http" :host *host*
 						  :port *port* :path *path*))))
     (guard (e (else (print "error") (raise e)))
  	(map (lambda (x)
  	       (let ((count (call server "bookmark.getTotalCount" x)))
  		 (if (< 0 count)
  		     (print x ":" count)))) (url-list (read-map (cadr args) (caddr args)))))))


 ;; Sitemapの読み込み
 (define (read-map site site-map) (receive (status head body) (http-get #?=site site-map)
 	   (call-with-input-string body (lambda (x) (ssax:xml->sxml x '((sitemap . "http://www.google.com/schemas/sitemap/0.84")))))))

 ;; SitemapからURLを取り出す
 (use sxml.sxpath)
 (define (url-list site-url) (map cadr ((sxpath '(sitemap:urlset sitemap:url sitemap:loc)) site-url)))	  

ちなみに大阪で SICP読書会 が行われているそうで。 第2回は都合でいけないけど、第3回以降は参加してみたいな。