特定のURLからファイルをダウンロードする - lisp-cookbook-ja/common-lisp GitHub Wiki

インターネットサービス trivial-http ライブラリ

特定のURLからファイルをダウンロードする

CLiki:trivial-httpを利用

(ql:quickload :trivial-http)

(trivial-http:http-download
 ;; ファイルのURL
 "http://www.lisperati.com/lisplogo_alien.svg"
 ;; 保存するファイル名
 "/tmp/lisplogo_alien.svg"                     
 ;; エラー発生でシグナルを上げない
 :signal-error? nil) 
;=>  41783 ;ダウンロードしたバイト数
;    "http://www.lisperati.com/lisplogo_alien.svg" ;ダウンロードしたURL

CLiki:drakmaを利用してダウンロードクライアントを作成

(defun download-file (filename uri)
  (with-open-file (out filename
                   :direction :output
                   :if-exists :supersede
                   :element-type '(unsigned-byte 8))
    (with-open-stream (input (drakma:http-request uri :want-stream t :connection-timeout nil))
      (loop :for b := (read-byte input nil -1)
            :until (minusp b)
            :do (write-byte b out)))))

;; 利用例
(download-file "alien.svg" "http://www.lisperati.com/lisplogo_alien.svg")