こんにちは、もりです!
当ブログで、freeeAPIの記事をいくつか書いています。そこでよく思うのが「事業所の切り替えが面倒くさい…」です。
すでにお使いの方はご存知のとおり、freeeAPIを使うためには「事業所ID」が必要です。リクエストURLのパラメータに指定します。
(例)事業所の勘定科目一覧を取得
https://api.freee.co.jp/api/1/account_items?company_id={ここに事業所ID}
この「事業所ID」は画面上で確認できないので、freeeAPIで取得しなければなりません。つまり、freeeAPIを操作するために、freeeAPIで事業所IDを確認しないといけない…(どこかにメモしておけばいいんですが、忘れたりします)
ちなみに、「事業所ID」を確認するコードがこちら。id, name などの事業所データの一覧をログで確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function getMyCompanies() { const accessToken = getService().getAccessToken(); const requestUrl = 'https://api.freee.co.jp/api/1/companies'; const params = { method : 'get', headers : {'Authorization':'Bearer ' + accessToken} }; const response = UrlFetchApp.fetch(requestUrl,params); Logger.log(response); } |
Contents
freeeAPIを使用するための事業所IDの指定方法
freeeAPIを使う場合の「事業所ID」の指定方法は、主に2つあるかなと思っています。
- スクリプトエディタに直接記述しておく
(例)const company_id = ‘1234567’;
→ この方法は手間がかかりませんが、事業所を切り替えるときにスクリプトエディタを開いて編集しなければなりません。
- スプレッドシートのセルに入力欄を用意する(freeeAPIアクセス時に入力値を取得する)
→ この方法は当ブログでもたまに紹介している方法です。こうすることで、アクセス先の事業所を切り替えるときに、スクリプトエディタの値を編集しなくていいんですね。
ただ、どちらの方法も「事業所ID」を使うのがちょっと面倒です。「事業所名」の方が馴染みがあります。
この記事では、スプレッドシートに「事業所名のリスト」を作成し、リストから選択するだけで事業所切り替えができる方法を紹介します。
下記動画は、指定の事業所の取引先一覧を取得している作業です。「事業所ID」ではなく、「事業所名」で事業所を指定しています。
スプレッドシートに事業所名のリストを作成する
事業所名の一覧をリスト(プルダウン)でセルに表示させて、リストから事業所を選択できるようにします。こうすることで、ツール使用者は「事業所ID」を気にしなくてよいのです。
これを実現するためには、2つの処理を作成します。
- スプレッドシートのセルに「事業所名リスト」を作成する
- スプレッドシートのリストで選択されている「事業所名」を「事業所ID」に変換する
スプレッドシートのセルに「事業所名リスト」を作成する
スプレッドシートの任意のセルに「事業所名リスト」を作成するスクリプトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
function createCompanyList() { const accessToken = getService().getAccessToken(); const requestUrl = 'https://api.freee.co.jp/api/1/companies'; const params = { method : 'get', headers : {'Authorization':'Bearer ' + accessToken} }; const response = UrlFetchApp.fetch(requestUrl,params); const obj = JSON.parse(response).companies; let values = []; //事業所名を格納する配列 for (let i in obj) { values.push(obj[i].name); } const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('テスト'); const rule = SpreadsheetApp.newDataValidation() .requireValueInList(values) .build(); //リストを作成するセル番地を指定して、リストをセット const cell = sheet.getRange('B2'); cell.setDataValidation(rule); } |
このスクリプトを実行すると、指定のセル(ここではB2セル)に、自分に権限のある事業所名のリストが作成されます。
好きなタイミングで実行してもよいですし、スプレッドシート起動時トリガーのonOpenで実行すれば、常に最新の事業所リストを取得できますね。
「事業所名リスト」は、GASを使わずに、スプレッドシートの「データの入力規則」で作っても、もちろんOKです。
ただし、名称が一文字でも異なると、次に紹介する事業所ID変換ができないのでご注意ください。
事業所名を事業所IDに変換する
「これで、事業所IDではなく、事業所名を指定できる…!」とはいえ、freeeAPIのパラメータにはやはり「事業所ID」の指定が必要です。
そこで、スプレッドシートのセルのリストで選択した「事業所名」を「事業所ID」に変換する処理を作成します。
(スクリプトは次項のサンプルコード内に掲載)
【サンプルコード】任意の事業所の取引先一覧を取得する
freeeAPIで、指定の事業所の「取引先一覧」を取得するスクリプトです。
ここまでに紹介した方法を組み合わせれば、ツール使用者は、事業所IDを気にすることなく、freeeAPIにアクセスできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
//指定の事業所の取引先一覧を取得する function getPatnersList() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('テスト'); const accessToken = getService().getAccessToken(); /* ★ポイント★ スプレッドシートのリストで選択されている「事業所名」を取得し、 「事業所ID」に変換する */ const company_name = sheet.getRange('B2').getValue(); //事業所名 const company_id = getCompanyId_(company_name); //事業所IDに変換 const requestUrl = 'https://api.freee.co.jp/api/1/partners?company_id=' + company_id; let obj = accessfreeeAPI_(accessToken,requestUrl); obj = obj.partners; //partnersプロパティを抜き出す if (obj.length) { //データがあれば let arr = []; for (let i in obj) { arr.push([obj[i].id,obj[i].name]); } sheet.getRange(2, 4, arr.length, arr[0].length).setValues(arr); } } /** * 事業所名から事業所IDを返す * * @param {string} 事業所名 * @return {string} 事業所ID */ function getCompanyId_(company_name) { const accessToken = getService().getAccessToken(); const requestUrl = 'https://api.freee.co.jp/api/1/companies'; let obj = accessfreeeAPI_(accessToken,requestUrl); obj = obj.companies; //companiesプロパティだけ抜き出す let company_id; for (let i in obj) { if (obj[i].name == company_name) { company_id = obj[i].id; break; } } return company_id; } /** * 指定のURLにGETリクエストを送信してレスポンスを返す * * @param {string} アクセストークン * @param {string} リクエストURL * @return {object} freeeAPIのレスポンス */ function accessfreeeAPI_(accessToken,url) { //短時間の連続アクセスを回避するため待機 Utilities.sleep(1000); const params = { method : 'get', headers : {'Authorization':'Bearer ' + accessToken} }; const response = UrlFetchApp.fetch(url,params); const obj = JSON.parse(response); return obj; } |
getPatnersList関数の実行結果です。事業所IDを気にしなくていいのが嬉しいですね。
【まとめ】freeeAPIの事業所切り替えをラクにする
事業所IDをスクリプトエディタに直接記述する方法に比べると、ちょっと手間はありますが、この仕組みを一度作ってしまえば、この先ずっと事業所切り替えをラクにすることができます。
以下、まとめです。
- 【事前準備】GAS、もしくは、手作業で、スプレッドシートの任意のセルに「事業所名リスト」を作成する。
- 【freeeAPIアクセス時】アクセスしたい「事業所名」をリストから選択する。ただし、パラメータに「事業所名」は使えないので「事業所ID」に変換する処理を加える。
freeeAPIで複数事業所を使用している方は、ぜひ使ってみてくださいね。