#:g1: cl-dropboxの紹介

Posted 2014-03-30 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の90日目です。

cl-dropboxとはなにか

 cl-dropboxは、Common LispからDropboxを利用するためのライブラリです。

パッケージ情報

パッケージ名cl-dropbox
Quicklisp
Quickdocshttp://quickdocs.org/cl-dropbox

インストール方法

(ql:quickload :cl-dropbox)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 利用するにあたって、まずはDropboxのAPIを利用できるように開発者登録をする必要があります(README.txt参照のこと)

 登録が済んだら、これもREADME.txtの通りに


(push '("application" . "x-www-form-urlencoded") drakma:*text-content-types*)

;;; (cl-dropbox:set-credentials :key "..." :secret "...")

(cl-dropbox:get-request-token)

(cl-dropbox:authorize-app) ;>> Visit the below url to authorize your app then return and press enter. ; https://www.dropbox.com/1/oauth/authorize?oauth_token=............ ; ブラウザでアクセスして認証し、REPLでEnterを入力 (cl-dropbox:get-account-info) ;=> ((:REFERRAL--LINK . "...") (:DISPLAY--NAME . "...") (:UID . ...) (:COUNTRY . "..") ; ...

 位の感じで認証ができます。

 それでは、ファイルの取得でもしてみましょう。
cl-oauthの変更の所為なのか、cl-dropboxが追従していない所為なのか、はたまた私が分かっていないのか不明ですが、DRAKMAに渡す引数に:authは無いと怒られるので、get-fileのoauth:access-protected-resourceから:request-method :authを消します。

(defun dbox-filename (path)
  (*:when-let (file (last (*:split "/" path)))
    (first file)))

(defun to-octet (obj) (etypecase obj (STRING (*:string-to-octets obj)) (VECTOR (coerce obj '(VECTOR (UNSIGNED-BYTE 8))))))

(defun dbox-fetch (file &key (dir (user-homedir-pathname))) (*:when-let (seq (ignore-errors (cl-dropbox:get-file :path file))) (*:with-output-to-file (out (merge-pathnames (dbox-filename file) dir) :element-type '(unsigned-byte 8) :if-exists :supersede) (and (write-sequence (to-octet seq) out) T))))

(dbox-fetch "/rare-files/foo.tar.gz") ;=> T

なんとなく取得できました。では、アップロード機能を試してみようかと思いましたが、どうもアップロードのAPIの方は、まだ使えるようになってないようです。

まとめ

 今回は、cl-dropboxを紹介してみました。
主要なAPIも揃っていないみたいなので、もしかしたら作りかけかもしれません。

comments powered by Disqus