[GAS・google apps script]人事労務freee で従業員一覧を取得する
結論
以下のコードで従業員一覧(退職者除く)を取得できます。
/******************************************************************
参照ライブラリ
title |OAuth2
project_key |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
******************************************************************/
//連携アプリ情報(Googleスプレッドシートサンプルファイル)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var APP_ID = "";
var SECRET = "";
/******************************************************************
function name |alertAuth
summary |認証のエンドポイントとなるダイアログ
******************************************************************/
function alertAuth() {
var service = getService();
var authorizationUrl = service.getAuthorizationUrl();
var template = HtmlService.createTemplateFromFile("autho");
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showModalDialog(page, "認証をしてください");
}
/******************************************************************
function name |getService
summary |freeeAPIのサービスを取得
******************************************************************/
function getService() {
return OAuth2.createService("freee")
.setAuthorizationBaseUrl("https://secure.freee.co.jp/oauth/authorize")
.setTokenUrl("https://api.freee.co.jp/oauth/token")
.setClientId(APP_ID)
.setClientSecret(SECRET)
.setCallbackFunction("authCallback")
.setPropertyStore(PropertiesService.getUserProperties());
}
/******************************************************************
function name |authCallback
summary |認証コールバック
******************************************************************/
function authCallback(request) {
var service = getService();
var isAuthorized = service.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput("認証に成功しました。タブを閉じてください。");
}
else {
return HtmlService.createHtmlOutput("認証に失敗しました。");
}
}
function getRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var requestUrl = 'https://api.freee.co.jp/api/1/companies';
var headers = { Authorization: "Bearer " + accessToken };
var targetSheetName = "事業所一覧";
var options = {
method: "get",
headers: headers
};
var res = UrlFetchApp.fetch(requestUrl, options).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse(res);
Logger.log(parsedResponse);
var data = parsedResponse.companies;
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
for (var i = 0; i < data.length; i++) {
param1.push([data[i].id]);
param2.push([data[i].name]);
param3.push([data[i].display_name]);
}
//取得したデータをシートに保存
var sheet = ss.getSheetByName(targetSheetName);
sheet.clear();
sheet.getRange(2, 1, param1.length, 1).setValues(param1);
sheet.getRange(2, 2, param2.length, 1).setValues(param2);
sheet.getRange(2, 3, param3.length, 1).setValues(param3);
}
function getRequestEmployees() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
sheet.clear();
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for ( var i = 1 ; i < 3 ; i++ ) {
var pages =String(i);
var requestUrl ="https://api.freee.co.jp/hr/api/v1/companies//employees?per=100&page="+ pages;
var headers = { "Authorization" : "Bearer " + accessToken };
var options ={
"method" : "get",
"headers" : headers
};
var res = UrlFetchApp.fetch( requestUrl , options ).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse( res );
var data = parsedResponse;
for ( var j = 0 ; j < data.length ; j++ ) {
param1.push( [ data[ j ].num ] );
param2.push( [ data[ j ].display_name ] );
param3.push( [ data[ j ].user_id ] );
param4.push( [ data[ j ].email ] );
param5.push( [ data[ j ].entry_date ] );
param6.push( [ data[ j ].retire_date ] );
param7.push( [ data[ j ].id ] );
};
}
//取得したデータをシートに保存
sheet.getRange( 1 , 1 , param1.length , 1 ).setValues( param1 );
sheet.getRange( 1 , 2 , param2.length , 1 ).setValues( param2 );
sheet.getRange( 1 , 3 , param3.length , 1 ).setValues( param3 );
sheet.getRange( 1 , 4 , param4.length , 1 ).setValues( param4 );
sheet.getRange( 1 , 5 , param5.length , 1 ).setValues( param5 );
sheet.getRange( 1 , 6 , param6.length , 1 ).setValues( param6 );
sheet.getRange( 1 , 7 , param7.length , 1 ).setValues( param7 );
}
function deleteRetireEmployees() {
//シートやスクリプトプロパティを読み込む
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
var data = sheet.getDataRange().getValues();
var emptyInfo = [];
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for (var j = 0; j < data.length; j++) {
var isCheckedEmpty = data[j][5];
if (isCheckedEmpty == "") {
param1.push([data[j][0]]);
param2.push([data[j][1]]);
param3.push([data[j][2]]);
param4.push([data[j][3]]);
param5.push([data[j][4]]);
param6.push([data[j][5]]);
param7.push([data[j][6]]);
}else{
}
}
//取得したデータをシートに保存
sheet.clear();
sheet.getRange(1, 1, param1.length, 1).setValues(param1);
sheet.getRange(1, 2, param2.length, 1).setValues(param2);
sheet.getRange(1, 3, param3.length, 1).setValues(param3);
sheet.getRange(1, 4, param4.length, 1).setValues(param4);
sheet.getRange(1, 5, param5.length, 1).setValues(param5);
sheet.getRange(1, 6, param6.length, 1).setValues(param6);
sheet.getRange(1, 7, param7.length, 1).setValues(param7);
}
はじめに
人事労務freeeのマスタ人事データを出力できるようにすると従業員一覧として、活用でき便利です。スプレッドシートを用意作成しておき、scriptを作成することで自動化できます。
ざっくりとした手順
1.freeeのアプリケーションを登録します。 https://secure.freee.co.jp/oauth/applications
2. スプレッドシートを作成しておき(シートは事業所一覧と従業員一覧とする)、script(code.gs , 認証ダイアログ.html)を作成します
3.scriptを動かして、アクセストークンを手に入れます。
4.従業員一覧を出力します。(退職者の削除)
1.freeeのアプリケーションを登録します。
なぜ、アプリケーションの登録が必要かというとfreeeはauth2.0(オーオース)を使うからです。説明は下記がわかりやすいです。
認可サーバにアプリケーションの登録をしておくと、アクセストークンを取得することができるようになります。
もらったアクセストークンを使用して、従業員情報があるリソースサーバー(freeeの図解ではデータサーバ)にアクセスします。
開発者のアカウントで会計freeeにログインし、
にアクセスし、「+新しいアプリケーションを登録」をクリックします。今回はGASを使うので、
freeeにアプリ登録をする際のCALLBACK_URLには「https://script.google.com/macros/d/{スクリプト ID}/usercallback」を用いてください
のとおりに、CALLBACK_URLを設定します。
var APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
をメモしておきます。
2. スプレッドシートを作成しておき、script(code.gs , 認証ダイアログ.html)を作成します
基本的にfreeeの公式に従って実行します。
/******************************************************************
参照ライブラリ
title |OAuth2
project_key |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
******************************************************************/
//連携アプリ情報(Googleスプレッドシートサンプルファイル)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
/******************************************************************
function name |alertAuth
summary |認証のエンドポイントとなるダイアログ
******************************************************************/
function alertAuth() {
var service = getService();
var authorizationUrl = service.getAuthorizationUrl();
var template = HtmlService.createTemplateFromFile( "認証ダイアログ" );
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showModalDialog( page , "認証をしてください" );
}
/******************************************************************
function name |getService
summary |freeeAPIのサービスを取得
******************************************************************/
function getService() {
return OAuth2.createService( "freee" )
.setAuthorizationBaseUrl( "https://secure.freee.co.jp/oauth/authorize" )
.setTokenUrl( "https://api.freee.co.jp/oauth/token" )
.setClientId( APP_ID )
.setClientSecret( SECRET )
.setCallbackFunction( "authCallback" )
.setPropertyStore( PropertiesService.getUserProperties() );
}
/******************************************************************
function name |authCallback
summary |認証コールバック
******************************************************************/
function authCallback( request ) {
var service = getService();
var isAuthorized = service.handleCallback( request );
if ( isAuthorized ) {
return HtmlService.createHtmlOutput( "認証に成功しました。タブを閉じてください。" );
} else {
return HtmlService.createHtmlOutput( "認証に失敗しました。" );
};
}
次にscriptのファイルから新規作成→HTMLを作成し、ファイル名を認証ダイアログとします。そして中身は
<a href="<?= authorizationUrl ?>" target="_blank" rel="noopener">認証する</a>
とします。次に"リソース"→"ライブラリ"から
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
を入力しライブラリを追加します。
そして、スクリプトを実行すると、ダイアログがひらくので、認証します。
これでアクセストークンを手に入れることがでたので、リソースサーバーに接続できるようなります。
企業IDをまず取得する必要があります。curlで取得できますが、
今回はspreadsheetに記載します。
function getRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var requestUrl = 'https://api.freee.co.jp/api/1/companies';
var headers = { Authorization: "Bearer " + accessToken };
var targetSheetName = "事業所一覧";
var options = {
method: "get",
headers: headers
};
var res = UrlFetchApp.fetch(requestUrl, options).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse(res);
Logger.log(parsedResponse);
var data = parsedResponse.companies;
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
for (var i = 0; i < data.length; i++) {
param1.push([data[i].id]);
param2.push([data[i].name]);
param3.push([data[i].display_name]);
}
//取得したデータをシートに保存
var sheet = ss.getSheetByName(targetSheetName);
sheet.clear();
sheet.getRange(1, 1, param1.length, 1).setValues(param1);
sheet.getRange(1, 2, param2.length, 1).setValues(param2);
sheet.getRange(1, 3, param3.length, 1).setValues(param3);
}
実行するとA1セルに企業IDが表示されていると思います。企業IDは従業員を取得するときに必要となります。freeeのAPIは企業IDがなくても、取得できるものとできないものがあります。*大体企業IDは必要です。
企業IDを用いて、従業員一覧を取得します。
function getRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
sheet.clear();
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for ( var i = 1 ; i < 3 ; i++ ) {
var pages =String(i);
var requestUrl ="https://api.freee.co.jp/hr/api/v1/companies/企業ID/employees?per=100&page="+ pages;
var headers = { "Authorization" : "Bearer " + accessToken };
var options ={
"method" : "get",
"headers" : headers
};
var res = UrlFetchApp.fetch( requestUrl , options ).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse( res );
var data = parsedResponse;
for ( var j = 0 ; j < data.length ; j++ ) {
param1.push( [ data[ j ].num ] );
param2.push( [ data[ j ].display_name ] );
param3.push( [ data[ j ].user_id ] );
param4.push( [ data[ j ].email ] );
param5.push( [ data[ j ].entry_date ] );
param6.push( [ data[ j ].retire_date ] );
param7.push( [ data[ j ].id ] );
};
}
//取得したデータをシートに保存
sheet.getRange( 1 , 1 , param1.length , 1 ).setValues( param1 );
sheet.getRange( 1 , 2 , param2.length , 1 ).setValues( param2 );
sheet.getRange( 1 , 3 , param3.length , 1 ).setValues( param3 );
sheet.getRange( 1 , 4 , param4.length , 1 ).setValues( param4 );
sheet.getRange( 1 , 5 , param5.length , 1 ).setValues( param5 );
sheet.getRange( 1 , 6 , param6.length , 1 ).setValues( param6 );
sheet.getRange( 1 , 7 , param7.length , 1 ).setValues( param7 );
}
今回はpagesにfor文をまわし、データを取得しています。ページネーションについては以下が詳しいです。ここらへんは従業員の規模によるかと思います。
4.従業員一覧を出力します。(退職者の削除)
今のままだと退職者も入っているので、削除します。退職日が記載されている配列は飛ばすようにします。
for (var j = 0; j < data.length; j++) {
var isCheckedEmpty = data[j][5];
if (isCheckedEmpty == "") {
param1.push([data[j][0]]);
param2.push([data[j][1]]);
param3.push([data[j][2]]);
param4.push([data[j][3]]);
param5.push([data[j][4]]);
param6.push([data[j][5]]);
param7.push([data[j][6]]);
}else{
}
}
以上の配列をつくったら、sheet.clear( )を実行し、シートの中身を消してから、シートに貼り付けます。
function deleteRetireEmployees() {
//シートやスクリプトプロパティを読み込む
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
var data = sheet.getDataRange().getValues();
var emptyInfo = [];
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for (var j = 0; j < data.length; j++) {
var isCheckedEmpty = data[j][5];
if (isCheckedEmpty == "") {
param1.push([data[j][0]]);
param2.push([data[j][1]]);
param3.push([data[j][2]]);
param4.push([data[j][3]]);
param5.push([data[j][4]]);
param6.push([data[j][5]]);
param7.push([data[j][6]]);
}else{
}
}
//取得したデータをシートに保存
sheet.clear();
sheet.getRange(1, 1, param1.length, 1).setValues(param1);
sheet.getRange(1, 2, param2.length, 1).setValues(param2);
sheet.getRange(1, 3, param3.length, 1).setValues(param3);
sheet.getRange(1, 4, param4.length, 1).setValues(param4);
sheet.getRange(1, 5, param5.length, 1).setValues(param5);
sheet.getRange(1, 6, param6.length, 1).setValues(param6);
sheet.getRange(1, 7, param7.length, 1).setValues(param7);
}
全体です。
/******************************************************************
参照ライブラリ
title |OAuth2
project_key |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
******************************************************************/
//連携アプリ情報(Googleスプレッドシートサンプルファイル)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var APP_ID = "";
var SECRET = "";
/******************************************************************
function name |alertAuth
summary |認証のエンドポイントとなるダイアログ
******************************************************************/
function alertAuth() {
var service = getService();
var authorizationUrl = service.getAuthorizationUrl();
var template = HtmlService.createTemplateFromFile("autho");
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showModalDialog(page, "認証をしてください");
}
/******************************************************************
function name |getService
summary |freeeAPIのサービスを取得
******************************************************************/
function getService() {
return OAuth2.createService("freee")
.setAuthorizationBaseUrl("https://secure.freee.co.jp/oauth/authorize")
.setTokenUrl("https://api.freee.co.jp/oauth/token")
.setClientId(APP_ID)
.setClientSecret(SECRET)
.setCallbackFunction("authCallback")
.setPropertyStore(PropertiesService.getUserProperties());
}
/******************************************************************
function name |authCallback
summary |認証コールバック
******************************************************************/
function authCallback(request) {
var service = getService();
var isAuthorized = service.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput("認証に成功しました。タブを閉じてください。");
}
else {
return HtmlService.createHtmlOutput("認証に失敗しました。");
}
}
function getRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var requestUrl = 'https://api.freee.co.jp/api/1/companies';
var headers = { Authorization: "Bearer " + accessToken };
var targetSheetName = "事業所一覧";
var options = {
method: "get",
headers: headers
};
var res = UrlFetchApp.fetch(requestUrl, options).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse(res);
Logger.log(parsedResponse);
var data = parsedResponse.companies;
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
for (var i = 0; i < data.length; i++) {
param1.push([data[i].id]);
param2.push([data[i].name]);
param3.push([data[i].display_name]);
}
//取得したデータをシートに保存
var sheet = ss.getSheetByName(targetSheetName);
sheet.clear();
sheet.getRange(2, 1, param1.length, 1).setValues(param1);
sheet.getRange(2, 2, param2.length, 1).setValues(param2);
sheet.getRange(2, 3, param3.length, 1).setValues(param3);
}
function getRequestEmployees() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
sheet.clear();
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for ( var i = 1 ; i < 3 ; i++ ) {
var pages =String(i);
var requestUrl ="https://api.freee.co.jp/hr/api/v1/companies//employees?per=100&page="+ pages;
var headers = { "Authorization" : "Bearer " + accessToken };
var options ={
"method" : "get",
"headers" : headers
};
var res = UrlFetchApp.fetch( requestUrl , options ).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse( res );
var data = parsedResponse;
for ( var j = 0 ; j < data.length ; j++ ) {
param1.push( [ data[ j ].num ] );
param2.push( [ data[ j ].display_name ] );
param3.push( [ data[ j ].user_id ] );
param4.push( [ data[ j ].email ] );
param5.push( [ data[ j ].entry_date ] );
param6.push( [ data[ j ].retire_date ] );
param7.push( [ data[ j ].id ] );
};
}
//取得したデータをシートに保存
sheet.getRange( 1 , 1 , param1.length , 1 ).setValues( param1 );
sheet.getRange( 1 , 2 , param2.length , 1 ).setValues( param2 );
sheet.getRange( 1 , 3 , param3.length , 1 ).setValues( param3 );
sheet.getRange( 1 , 4 , param4.length , 1 ).setValues( param4 );
sheet.getRange( 1 , 5 , param5.length , 1 ).setValues( param5 );
sheet.getRange( 1 , 6 , param6.length , 1 ).setValues( param6 );
sheet.getRange( 1 , 7 , param7.length , 1 ).setValues( param7 );
}
function deleteRetireEmployees() {
//シートやスクリプトプロパティを読み込む
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("従業員一覧");
var data = sheet.getDataRange().getValues();
var emptyInfo = [];
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
var param6 = [];
var param7 = [];
for (var j = 0; j < data.length; j++) {
var isCheckedEmpty = data[j][5];
if (isCheckedEmpty == "") {
param1.push([data[j][0]]);
param2.push([data[j][1]]);
param3.push([data[j][2]]);
param4.push([data[j][3]]);
param5.push([data[j][4]]);
param6.push([data[j][5]]);
param7.push([data[j][6]]);
}else{
}
}
//取得したデータをシートに保存
sheet.clear();
sheet.getRange(1, 1, param1.length, 1).setValues(param1);
sheet.getRange(1, 2, param2.length, 1).setValues(param2);
sheet.getRange(1, 3, param3.length, 1).setValues(param3);
sheet.getRange(1, 4, param4.length, 1).setValues(param4);
sheet.getRange(1, 5, param5.length, 1).setValues(param5);
sheet.getRange(1, 6, param6.length, 1).setValues(param6);
sheet.getRange(1, 7, param7.length, 1).setValues(param7);
}
この記事が気に入ったらサポートをしてみませんか?