Common Lispで会計freeeのAPIを叩く

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もやっていきたいですね。

関連記事

comments powered by Disqus