PowerShellでマネーフォワード クラウド請求書APIを実行
マネーフォワード クラウド請求書とは?
ブラウザで請求書を作成して管理する事ができるクラウドサービスです。
もちろん作成した請求書はPDFにしたり印刷したりできます。
面白いのは、作った請求書を郵送までしてくれるサービスなんかも有るそうです。
なお「請求書」をうたっていますが、同サービスで「見積書 / 納品書 / 領収書」も作成できます。
公式は以下です。
PowerShellでクラウド請求書APIを実行する
画面でポチポチやって請求書作成しても良いんですが、最近のクラウドサービスらしく、REST APIが公開されているので PowerShellで試しに実行してみました。
実行前の準備
準備には以下が必要です。
注意点も併せて記載しました。特に認証に使うトークンは2種類必要なのを気を付けてください。
当たり前ですがRead権限のトークンで見積書作成APIは実行できません。
- クラウド請求書のサービス契約
- 契約プラン毎にAPIの実行制限があります。注意。
- APIを実行するアプリケーションの作成
- アプリとは単なるAPI実行のための設定です。
- Read権限とWrite権限それぞれ必要です。
- アクセストークンの発行
- Read権限とWrite権限それぞれ必要です。
準備の詳細は、以下をご確認ください。
APIドキュメント
以下にAPIドキュメントが有ります。
curl での実行例が記載されています。
取引先をGetする
PowerShellで実行する場合は以下のように「Invoke-RestMethod」で実行します。
注意点は、トークンは取得なのでRead権限用を使用します。また、先頭に固定文字が入ります。
また、パラメータとしてpage、per_pageを指定します。ページングのためのパラメータです。
per_pageが1ページの取得件数です。Maxは100件のようです。pageは、その名の通りページ数です。
# アクセストークン(Read)
$READ_TOKEN = 'BEARER xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# MF請求書API URL
$API_URL = 'https://invoice.moneyforward.com/api/v2/'
# カレントページ数
$pageNumber = 1
# 1ページあたりの件数
$per_pageNumber = 10
# 取引先一覧取得
$partners = Invoke-RestMethod -Method Get `
-Headers @{'Authorization' = $READ_TOKEN } `
-uri $( $API_URL + 'partners.json?page=' + "$pageNumber" + '&per_page=' + "$per_pageNumber")
# 結果出力
$partners
取得したオブジェクトは以下のようなものです。
work> $partners | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
data NoteProperty Object[] data=System.Object[]
included NoteProperty Object[] included=System.Object[]
meta NoteProperty System.Management.Automation.PSCustomObject meta=@{total_count=1217; total_pages=122; current_page=1; per_page=10}
必要なところは、$partners.dataなので以下のように。
work> $partners.data | foreach {
$_.attributes
}
code : aaa
name : XXXX株式会社
name_kana :
name_suffix : 御中
memo :
created_at : 2019-12-11T10:19:53.000+09:00
updated_at : 2019-12-11T10:19:53.000+09:00
code : bbb
name : ●●●●株式会社
name_kana :
name_suffix : 御中
memo :
created_at : 2019-12-11T10:20:43.000+09:00
updated_at : 2019-12-11T10:20:43.000+09:00
~~~~~~~~
ページング処理とループ制御
REST APIだとHTTP通信でデータ取得するので、大量のデータを全部一括で取得できるようにはなっていません。1回に取得できる件数が決まっていて、ページング処理で何回かにわけて取得していく形になります。
今回のクラウド請求書APIでもページング用パラメータがあるので、特定のデータを抽出したい場合は、ページ数を変えながら何回かループ処理していく事になります。
以下は指定の取引先名のデータを取得するスクリプトです。
# アクセストークン(Read)
$READ_TOKEN = 'BEARER XXXXXXXXXXXXXXXXXXXXX'
# MF請求書API URL
$API_URL = 'https://invoice.moneyforward.com/api/v2/'
# 検索する取引先名
$keyword = "テスト株式会社"
# メタデータ取得関数
Function Get-MfMetaData {
param($data)
$retMeta = $null
if ($data -eq 'partner') {
$retMeta = Invoke-RestMethod -Method Get -Headers @{'Authorization' = $READ_TOKEN } -uri $( $API_URL + 'partners.json?page=' + "1" + '&per_page=' + "1")
}
$retMeta.meta
}
# 取引先取得関数
Function Get-MfPartners {
param($pageNumber, $per_pageNumber, $serch_name)
# 取引先 取得
$partners = Invoke-RestMethod -Method Get -Headers @{'Authorization' = $READ_TOKEN } -uri $( $API_URL + 'partners.json?page=' + "$pageNumber" + '&per_page=' + "$per_pageNumber")
# 取引先 名称検索(完全一致)
$partners.data | where { $_.attributes.name -eq $serch_name }
}
# トータル件数取得のため、メタデータ取得
$metaData = Get-MfMetaData -data 'partner'
# レコードトータル件数から100件取得時のトータルページ数を算出
[float]$divisionResult = $metaData.total_count / 100
[int]$totalPage = [Math]::Floor($divisionResult)
[int]$remainder = $metaData.total_count % 100
if ($remainder -ge 1) {
$totalPage++
}
# トータルページ数分ループ実行
foreach ($number in 1..$totalPage) {
$getPartner = $null
$getPartner = Get-MfPartners -pageNumber $number -per_pageNumber 100 -serch_name $keyword
if ($null -ne $getPartner) {
$getPartner
break;
}
}
まとめ
PowerShellでクラウド請求書APIを実行して、データ取得してみました。
BashとかLinuxのShellだと出力を文字列処理でゴニョゴニョしないといけないので
ロジックとは別のとこで、悩まないといけません。
PowerShellなら出力が全てオブジェクトなのでやっぱり便利です。
ShellスクリプトならPowerShellを使うのが良い選択だと思います。
2件のピンバック
マネーフォワード クラウド請求書APIのアクセストークン期限について | KMGT-SYSTEM blog
マネーフォワードクラウド請求書APIによる請求書作成 | KMGT-SYSTEM blog
コメントは現在停止中です。