前提
公式ドキュメントを見るのが一番いいですが、初心者向けに。
サンプルコード
従業員全員の情報を引っ張ってくるサンプル
const TENANT_ID = 'YOUR_COMPANIYS_TENANT_ID';
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
const STAY_SECOND = 1;
function is_last_page(headers){
try{
links = headers['link']; //nextのURL表記が最終ページで無くなる
if('next' in links){
return false;
}else{
return true;
}
}catch(e){
if(e instanceof TypeError){ // 1ページで完結する場合はそもそもlink要素が無い
return true;
}else{
throw e;
}
}
}
function object_to_param(obj){
return Object.keys(obj).map(function(key){ return key+"="+ obj[key] }).join("&")
}
function extract(){
let HEADERS = {
'Authorization': 'Bearer '+ ACCESS_TOKEN
};
result = []
// 安全のため上限を100回に設定
for(let i = 1; i < 100; i++){
let url = 'https://' + TENANT_ID + '.smarthr.jp/api/v1/crews?';
let payload = {
'page': i,
'per_page': 100,
'emp_status': 'employed', //ここらへんはご自身のやりたいことに合せて追加・削除してください。
}
let options = {
'method' : 'GET',
'headers' : HEADERS,
}
let response = UrlFetchApp.fetch(url + object_to_param(payload), options);
let result = result.concat(JSON.parse(response));
if(is_last_page(response.getHeaders())){
break;
}else{
Utilities.sleep(STAY_SECOND * 1000);
}
}
return result;
}
function main(){
Logger.log(extract());
}
解説
- APIを叩いているextract()では、ページ遷移が発生するためループ構造になっている。
- is_last_page()でページ遷移における最終ページかの判定をしている。もっとエレガントな方法もあるかも。
- object_to_param()は、オブジェクトをGETメソッドのパラメタ文字列に変換している。GASのGETではoptionsにpayloadとして追加することはできないっぽい。
次回はその後の加工について記載する。