commonlispでwebapi叩いてみた

lispapiを叩くのに色々頑張ったので初心者の方にshareです。

(ql:quickload :drakma)
(ql:quickload :babel)
(ql:quickload :cl-json)

(defun send (endpoint)
  (let* (
         ;drakmaを使ってendpointをgetで叩く
         (encoded-json (drakma:http-request endpoint))

         ;babelに渡すために決まった形があるらしい
         (vec (make-array (length encoded-json)
                             :initial-contents encoded-json
                             :element-type '(unsigned-byte 8)))

         ;babelでutf-8指定して文字列に戻す
         (json (babel:octets-to-string vec :encoding :utf-8))

         ;cl-jsonでjsonをdecodeしてlistにする
         (result (json:decode-json-from-string json)))

    ; (print encoded-json)
    ; (print "---------------------------------------")
    ; (print vec)
    ; (print "---------------------------------------")
    ; (print json)
    ; (print "---------------------------------------")
    ; (print result)
    ; (print "---------------------------------------")

    result))

(send "http://weather.livedoor.com/forecast/webservice/json/v1?city=400040")

最近lispばかり書いていますが、
lisp楽しいまだマクロとか書いていないのでlispはこれからもっと楽しくなりそうです。

lispの仕事があれば紹介してほしいです笑

(参考にしたURL ありがとうございました!)
http://cl.cddddr.org/index.cgi?Babel
http://qiita.com/zeptometer/items/175b97844046b83fc5f2
https://common-lisp.net/project/cl-json/