tamuraです。
Common Lispから会計freeeのAPIを叩くライブラリを作って見ました。
ライブラリ
https://github.com/tamurashingo/cl-freee
- まだ
get
しか使えません - トークンが切れても自動でリフレッシュしません
(DexadorのProxyAuth対応はこれで使いたかったからです)
インストール
Quicklispには登録していないので(する予定もないので)、source-registry.conf
に記載されているディレクトリなどで、cloneしてください。
$ git clone https://github.com/tamurashingo/cl-freee.git
インストール例
$ cat .config/common-lisp/source-registry.conf
(:source-registry
(:tree (:home "prog/lisp"))
:inherit-configuration)
$ cd ~/prog/lisp
$ git clone https://github.com/tamurashingo/cl-freee.git
CL-USER> (ql:quickload :cl-freee)
To load "cl-freee":
Load 1 ASDF system:
cl-freee
; Loading "cl-freee"
..................................................
[package cl-freee.connection].....................
[package cl-freee.api]............................
[package cl-freee.api.account-items]..............
[package cl-freee.api.banks]......................
[package cl-freee.api.companies]..................
[package cl-freee.api.deals]......................
[package cl-freee.api.items]......................
[package cl-freee.api.manual-journals]............
[package cl-freee.api.partners]...................
[package cl-freee.api.sections]...................
[package cl-freee.api.selectables]................
[package cl-freee.api.tags].......................
[package cl-freee.api.taxes]......................
[package cl-freee.api.transfers]..................
[package cl-freee.api.users]......................
[package cl-freee.api.walletables]................
[package cl-freee.api.wallete-txns]...............
[package cl-freee]
(:CL-FREEE)
使い方
なんらかの方法でアクセストークンを取得済みの場合
コネクションを作る際にトークンを指定してあげます。
(defvar *conn*
(cl-freee:make-connection :client-id "xxxxxxxxxxxxx"
:client-secret "xxxxxxxxxxxxx"
:redirect-uri "xxxxxxxxxxx"
:access-token "xxxxxxxxx"
:refresh-token "xxxxxxxxxxx"))
アクセストークンを取得していない場合
普通にコネクションを作成して、その後authorize
します。
(authorization-code
の受け取り方はお任せします)
(defvar *conn*
(cl-freee:make-connection :client-id "xxxxxxxxxxxxx"
:client-secret "xxxxxxxxxxxxx"
:redirect-uri "xxxxxxxxxxx"))
(cl-freee:authorize *conn* "xxxxxxxxxx")
トークンの保存
トークンをリフレッシュした際に、callbackを呼ぶのでそれを使って新しいトークンを保存します。
(defvar *access-token* NIL)
(defvar *refresh-token* NIL)
(defvar *conn*
(cl-freee:make-connection :client-id "xxxxxxxxxxxxx"
:client-secret "xxxxxxxxxxxxx"
:redirect-uri "xxxxxxxxxxx"
:callback #'(lambda (access-token refresh-token)
(setf *access-token* access-token)
(setf *refresh-token* refresh-token))))
API
とりあえずcompany-id
を取得します。
CL-USER> (cl-freee:get-companies *conn*)
((:COMPANIES
((:ID . 1046386) (:NAME) (:NAME--KANA) (:DISPLAY--NAME . "タムシステムズ")
(:ROLE . "admin"))
((:ID . xxxxx) (:NAME) (:NAME--KANA) (:DISPLAY--NAME . "事業所名(未設定)")
(:ROLE . "admin"))))
明細をみてみます。
CL-USER> (cl-freee:get-wallete-txns *conn* :company-id 1046386)
((:WALLET--TXNS
((:ID . 90608159) (:COMPANY--ID . 1046386) (:AMOUNT . 220000) (:BALANCE . 0)
(:DESCRIPTION . "") (:DUE--AMOUNT . 0) (:DATE . "2017-07-31")
(:ENTRY--SIDE . "income") (:WALLETABLE--TYPE . "bank_account")
(:WALLETABLE--ID . 871657))
((:ID . 90608158) (:COMPANY--ID . 1046386) (:AMOUNT . 140000) (:BALANCE . 0)
(:DESCRIPTION . "") (:DUE--AMOUNT . 0) (:DATE . "2017-07-31")
(:ENTRY--SIDE . "income") (:WALLETABLE--TYPE . "bank_account")
(:WALLETABLE--ID . 871657))
((:ID . 90608161) (:COMPANY--ID . 1046386) (:AMOUNT . 3000) (:BALANCE . 0)
(:DESCRIPTION . "") (:DUE--AMOUNT . 0) (:DATE . "2017-07-30")
(:ENTRY--SIDE . "expense") (:WALLETABLE--TYPE . "bank_account")
(:WALLETABLE--ID . 871657))
((:ID . 90608160) (:COMPANY--ID . 1046386) (:AMOUNT . 7000) (:BALANCE . 0)
(:DESCRIPTION . "") (:DUE--AMOUNT . 0) (:DATE . "2017-07-30")
(:ENTRY--SIDE . "expense") (:WALLETABLE--TYPE . "bank_account")
(:WALLETABLE--ID . 871657))
((:ID . 90608162) (:COMPANY--ID . 1046386) (:AMOUNT . 4000) (:BALANCE . 0)
(:DESCRIPTION . "") (:DUE--AMOUNT . 0) (:DATE . "2017-07-29")
(:ENTRY--SIDE . "expense") (:WALLETABLE--TYPE . "bank_account")
(:WALLETABLE--ID . 871657))))
どんなAPIあるの?
https://github.com/tamurashingo/cl-freee/tree/master/src/api
ここに一覧があるのであとはコードをよんでください。。。 仕訳帳以外のGETはすべて実装済です。
今後
人事労務のAPIもやっていきたいですね。