こんにちは!ITライターのもり(@moripro3)です!
クラウド会計ソフトfreeeのAPIを使って経理業務を自動化するネタをお届けしています。
このシリーズでは、freeeとチャットワークを連携して「当日入金予定の取引一覧を自動でチャットワークに送信するツール」を作成します。
成果物のイメージがこちら!入金予定のある日に、取引一覧を自動でチャットワークに通知します。
前回の記事では、freeeAPIリファレンスの機能を使って、取引一覧を取得する「リクエストURL」を作成し、URL・パラメータの仕組みを紹介しました。
今回の記事では、GASでfreeeAPIにアクセスして「当日入金予定の取引一覧を取得する」スクリプトを作成します。
下記の図が「ツールの全体像」と「今回作成する範囲」です。
シリーズを通してfreeeAPIを使いこなし、経理業務の自動化を進めていきましょう!
(この記事はfreee株式会社さまとのコラボ企画です。シリーズを通して、皆さんの働くの価値を上げられるようサポートしていきます!)
(おさらい)リクエストURL
前回の記事で、freeeAPIリファレンスの「リクエストURL生成機能」を使って、リクエストURLを作成しました。
https://api.freee.co.jp/api/1/deals?company_id=9999999&status=unsettled&type=income&start_due_date=2019-08-01&end_due_date=2019-08-01&limit=100
このリクエストURLには、取得したいデータの「条件」が含まれています。
項目名 | パラメータ名 | 値 |
---|---|---|
事業所ID | company_id (*required) | 取得対象の事業所ID |
決済状況 | status | unsettled |
収支区分 | type | income |
支払期日(開始日) | start_due_date | 当日日付(yyyy-mm-dd) |
支払期日(終了日) | end_due_date | 当日日付(yyyy-mm-dd) |
取得最大件数 | limit | 省略した場合は20(ここでは最大値100とする) |
リクエストURLは「URL(①)」と「パラメータ(②)」で構成されています。URL(①)とパラメータ(②)は ? で結合します。
①URL
https://api.freee.co.jp/api/1/deals
②パラメータ
company_id=9999999&status=unsettled&type=income&start_due_date=2019-08-01&end_due_date=2019-08-01&limit=100
パラメータは、「パラメータ名」と「値」を = で結合して「パラメータ名=値」とし、それらを & で結合します。
スプレッドシートとfreeeAPIを連携する
GASでfreeeAPIにアクセスするためには、スプレッドシートとfreeeAPIを連携・認証する必要があります。
シリーズ初回の記事で、新規のスプレッドシートに「会計freee連携アドオン」を導入し、3つの情報を取得しました。
- 勘定科目情報
- 取引先情報
- 品目情報
これらの情報は今後も使うので、シリーズを通して同じスプレッドシートを利用していきましょう。
今回の記事から、GASでfreeeAPIにアクセスしていきます。シリーズ1で連携の設定方法を紹介しているので、こちらの記事をご覧のうえ、設定してみてください。
※すでにfreeeAPIと連携済みのスプレッドシートをお持ちの方は、そのスプレッドシートに「会計freee連携アドオン」を導入する方法でもかまいません。
ここまで準備ができたら、スクリプトを書いていきましょう。
当日の日付”yyyy-mm-dd”を取得する関数
このシリーズで作成するツールでは、「当日入金予定の取引一覧」を取得します。
そのため、前回作成したリクエストURLの、パラメータ「支払期日」に「当日日付」を設定します。
- start_due_date(支払期日・開始日) = 当日日付
- end_due_date(支払期日・終了日) = 当日日付
https://api.freee.co.jp/api/1/deals?company_id=9999999&status=unsettled&type=income&start_due_date=当日日付&end_due_date=当日日付&limit=100
スクリプトを日次で自動実行させるので、「当日日付」=「スクリプトを実行した日付」とします。
そこで、「スクリプトを実行した日付」を取得する関数を作成します。
日付の形式は、ハイフン区切りの「yyyy-mm-dd」です。
(例)2019年8月1日 → 2019-08-01
※月・日が1桁の場合、先頭をゼロ埋めします
まず、現在の日時でDateオブジェクトを生成します。
次に、Utilitiesライブラリを使用して、Dateオブジェクトの表示形式を変更します。
※第3引数のフォーマットは’yyyy-MM-dd’です(Mが大文字)
以上の2つの処理で「yyyy-mm-dd」形式の日付を作成できます。
var date = new Date(); //現在日時 date = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); //表示形式を変換 Logger.log(date); //ex) 2019-08-01
これで、変数dateに「スクリプトを実行した日付」が格納されるので、リクエストURLの日付パラメータを変数dateに置き換えればOKですね。
当日入金予定の取引一覧を取得する
リクエストURL生成機能で作ったリクエストURLがこちらでした。
https://api.freee.co.jp/api/1/deals?company_id=9999999&status=unsettled&type=income&start_due_date=2019-08-01&end_due_date=2019-08-01&limit=100
パラメータの「事業所ID」と「支払期日」を変数に置き換えます。(複数事業所をお持ちの方がIDを変更しやすいよう、事業所IDも変数に持たせておきます)
パラメータの設定値をこのように変更します。
- company_id(事業所ID) = company_id
- start_due_date(支払期日・開始日) = date
- end_due_date(支払期日・終了日) = date
リクエストURLの「文字列」と「変数」は + で結合します。
var company_id = '9999999'; //事業所ID var date = new Date(); //現在日時 date = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); //表示形式を変換 var requestUrl = 'https://api.freee.co.jp/api/1/deals?company_id=' + company_id + '&status=unsettled&type=income&start_due_date=' + date + '&end_due_date=' + date + '&limit=100'; Logger.log(requestUrl);
変数requestUrlのログ出力結果です。
https://api.freee.co.jp/api/1/deals?company_id=9999999&status=unsettled&type=income&start_due_date=2019-08-15&end_due_date=2019-08-15&limit=100
このスクリプトは2019/8/15に実行したものなので、2つのパラメータの値が当日日付「2019-08-15」になっています。
- start_due_date=2019-08-15
- end_due_date=2019-08-15
これで「当日入金予定の取引一覧」を取得するリクエストURLの完成です。
GETリクエストでデータを取得する
GETリクエストの基礎知識はシリーズ1で紹介しているので、はじめてfreeeAPIを操作する方はご覧になってみてください。
変数requstUrlにリクエストURLをセットして、スクリプトを実行します。
※リクエストURLは、読みやすいようにパラメータ毎に改行しています。
function getDeals() { var accessToken = getService().getAccessToken(); var company_id = 'xxxxxxx'; //事業所ID var date = new Date(); //現在日時 date = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd'); //表示形式を変換 //リクエストURL var requestUrl = 'https://api.freee.co.jp/api/1/deals?' + 'company_id=' + company_id + '&status=unsettled' + '&type=income' + '&start_due_date=' + date + '&end_due_date=' + date + '&limit=100'; //リクエスト送信時に付与するオプションパラメータ var params = { "method" : "get", "headers" : {"Authorization":"Bearer " + accessToken} }; var response = UrlFetchApp.fetch(requestUrl,params); Logger.log(response); }
対象データが存在する場合
freeeの取引画面で「収入」「未決済」一覧を表示してみます。支払期日2019-08-15の取引が3件あります(あらかじめデータを仕込んでいます)
スクリプトを実行して、この3件が取得できればOKです。
実行結果のログ(変数responseの値)です。下記のようにJSON形式の文字列が返ってくれば成功です。
due_date:2019-08-15 の3件を取得できました。
対象データが存在しない場合
条件に合致する取引が存在しない場合も、レスポンスが返ってきます。total_countというパラメータの値が0になっています。
この場合、「当日入金予定の取引は無し」と判定できますね。
まとめ・次回予告
「当日入金予定の取引一覧を自動でチャットワークに送信する」シリーズの第3回目では、これらを紹介しました。
- スクリプト実行時の「当日日付」を取得する関数の作り方
→現在日時のDateオブジェクトを生成し、Utilitiesライブラリでフォーマット変更する(yyyy-mm-dd) - GETリクエストで当日入金予定の取引一覧を取得する方法
→レスポンスとしてJSON形式の文字列を取得
次回は、freeeAPIのレスポンス(JSON形式の文字列)から、必要なデータを取り出す方法を紹介します。
連載目次:【GAS×freeeAPI】当日入金予定の取引一覧を自動でチャットワークに送信する
「クラウド会計ソフトfreee」のAPIをGASで操作して経理業務を自動化するシリーズ。「当日入金予定の取引一覧を自動でチャットワークに送信するツール」の作成を目標とします。
- ノンプログラミングでOK!「会計freee連携アドオン」でスプレッドシートにデータを取得する
- 【GAS×freeeAPI】指定条件の取引一覧を取得する「リクエストURL」の作り方と仕組み
- 【GAS×freeeAPI】GETリクエストで当日入金予定の取引一覧を取得する
- 【GAS×freeeAPI】APIリクエストのレスポンスから必要データのみを取り出す
- 【GAS×freeeAPI】オブジェクトからデータを取り出してスプレッドシートに書き出す
- 【GAS×freeeAPI】スプレッドシートのデータからチャットワーク通知用の本文を作成する
- 【GAS×freeeAPI】当日入金予定の取引一覧を毎日自動でチャットワークに送信する