Subscribed unsubscribe Subscribe Subscribe

Schemeで[http://developer.yahoo.co.jp/search/:title=Yahoo!検索Webサービス]

プログラミング

Gaucheで実用的なプログラムを書いたことがないので試してみた.はじめはGoogle Web APIsでWeb検索するためのライブラリを書こうと思ったけど,GaucheにSOAPライブラリがなさそうなのでパス.RESTを使っているYahoo!にした.ちなみにYahoo!は標準でJavaScriptPerlPHPのライブラリを配布しているらしい.

Schemeで入出力を扱うコードを書いたことがなかったので,サンプルを見てちょっと気持ち悪さを感じた.関数型の言語で入出力を扱うとやっぱり気持ち悪い.

とりあえず,素直に検索するだけならば以下のコードでXMLの文字列が得られる.

(use gauche.net)

(define host "api.search.yahoo.co.jp")
(define service "/WebSearchService/V1/")
(define appid "your appid")

(define (search query)
  (get (make-request host service (make-method appid query))))

(define (make-request host service method)
  (list host service method))
(define (make-method appid query)
  (format "webSearch?appid=~a&query=~a" appid query))

(define (get request)
  (let ((host (car request))
	(service (cadr request))
	(method (caddr request)))
    (let ((path (format "~a~a" service method)))
      (call-with-client-socket
       (make-client-socket 'inet host 80)
       (lambda (in out)
	 (format out "GET ~a HTTP/1.0\r\n" path)
	 (format out "HOST: ~a\r\n\r\n" host)
	 (flush out)
	 (port->string in))))))

手抜きだらけ.(search "hoge")すればXMLを含む文字列が返ってくる.

どういうインタフェースが嬉しいのかまだよくわからないが,もっと嬉しい方法があるのかもしれない.

あとは受け取った文字列をXMLに変換してごにょごにょする必要があるのだろう.ということで,あとで書く.