こんにちは。ITライターのもり(@moripro3)です!
「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。
過去の記事で、GAS × freeeAPI の連携で「データ取得」と「データ作成」の基本的な手順を紹介してきました。
こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、GASでfreeeAPIを使うための作業手順を紹介しました[…]
こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、freeeAPIから取得したデータをスプレッドシートに出力[…]
この記事から、freeeAPIを使用した実務的なネタを紹介していきます。テーマは「Googleドライブのファイルを、freee のファイルボックスに自動でアップロードする」です。
freeeのファイルボックスにレシート等の証憑ファイルをアップロードする方法として、スキャナ取り込みやDropbox連携がありますが、IT 環境が整備されていない会社では、経理担当者が毎日手作業でアップロードしているのではないでしょうか。
freeeAPI を使って、freeeのファイルボックスにファイルをアップロードするスクリプトを作成し、GASのトリガーで自動実行することで、例えばこのような使い方ができます。
それではいってみましょう!
freeeAPIリクエストの情報を確認する
APIリクエストに必要な情報を、freeeAPI公式リファレンスで確認していきましょう。
ファイルボックス証憑ファイルアップロードの「メソッド」と「リクエスト URL」
ファイルのアップロードは、以下4種類のリクエストの「データ作成(登録)」にあたるので、通常、POST メソッドを使用します。
処理 | メソッド |
---|---|
データの取得 | GET |
データの作成 | POST |
データの更新 | PUT |
データの削除 | DELETE |
これは、リファレンスでも確認できます。
リクエスト URLは以下のとおりです。
- ① APIエンドポイント(固定値) = https://api.freee.co.jp/
- ②個別URL = /api/1/receipts
- ③パラメータ = なし
①+②+③を結合した文字列が、目的となるリクエストURLです。
(参考)リクエストヘッダーのContent-Type
この記事のテーマは「ファイルのアップロード」であり、freeeAPIを使用した一般的なデータ作成と異なる点があります。それは、リクエストヘッダーに付与するContent-Typeです。Content-Type とは、リクエスト先(ここでは freeeAPI)に「送信データの形式」を伝える情報です。
※単一の JSON データのみを送信する場合は、Content-Typeに “application/json” を指定します(例:GAS×freeeAPIでスプレッドシートのデータをfreeeに登録する方法)
contentType: "application/json"
ファイルアップロードの処理で「送信するデータ」とは、PDFファイルやJPEG画像などです。単一のJSONデータではなく、複数の異なる種類のデータを扱うので、Content-Typeは指定不要です。
Googleドライブのファイルをfreeeのファイルボックスにアップロードする
それでは、Googleドライブにファイルを準備して、それらをアップロードするスクリプトを紹介します。
Googleドライブにファイルを格納する
Googleドライブに専用のフォルダを作り、アップロードするファイルをまとめて格納します。スクリプト内に「フォルダID」を指定するのでメモしておきましょう。
アップロードに成功したファイルを識別できるよう、別フォルダに移動する処理も作ります。「confirmed」というフォルダも作成して、フォルダIDをメモしておきましょう。
ドライブのファイルをアップロードするスクリプト
以下がスクリプトです。下記の3点を設定して uploadFiles 関数を実行します。
- アップロード対象のファイルを格納するフォルダID
- アップロード成功後にファイルを移動するフォルダID(confirmed)
- freeeの事業所ID
function uploadFiles() { const folder_id_source = "ファイル格納場所のフォルダIDを設定"; const folder_id_confirmed = "ファイル移動先のフォルダIDを設定"; const files = DriveApp.getFolderById(folder_id_source).getFiles(); while (files.hasNext()) { const file = files.next(); const blob = DriveApp.getFileById(file.getId()).getBlob(); const response = postFilebox_(blob); Logger.log(response); const obj = JSON.parse(response); //アップロード成功したらフォルダ移動 if (obj.receipt.status === "confirmed") { DriveApp.getFolderById(folder_id_confirmed).addFile(file); DriveApp.getFolderById(folder_id_source).removeFile(file); } } } /** * @params {Object} blob アップロードするファイル * @return {Object} response freeeAPI送信結果 */ function postFilebox_(blob) { const access_token = getService().getAccessToken(); const company_id = "事業所IDを設定"; //事業所ID const url = "https://api.freee.co.jp/api/1/receipts"; const body = { company_id: company_id, receipt: blob }; const params = { method: "POST", headers: { "Authorization": "Bearer " + access_token }, payload: body, muteHttpExceptions: true //エラー発生時にログ出力 }; const response = UrlFetchApp.fetch(url, params); return response; }
実行結果
スクリプトの実行ログを確認してみましょう。freeeAPIからのレスポンスはJSONデータです。”receipt” プロパティの中にある “status” プロパティの値が “confirmed” になっていれば成功です。
アップロード成功したファイルが、confirmedフォルダに移動されました。
つづいて、freeeのファイルボックスをみてみましょう。ファイルがアップロードされていることを確認できます。
他の手段でファイルボックスにアップロードした場合と同様に、画像内の文字からの取引自動入力(OCR)も有効です。
トリガーで自動実行しよう
GASの強みはなんといっても「トリガーによる定期自動実行」です。業務要件にあわせて、トリガーを設定しておくとよいでしょう。
- n時間おきに実行する
- 毎日n時 ~ n時に実行する など
以上、GAS × freeeAPIで証憑ファイルを自動アップロードする方法を紹介しました。
この記事を読んでfreeeAPIに興味を持ってくれた方は、ぜひこちらの記事もあわせてご覧ください!