GASからLambdaにzendesk_idを渡してzendesk APIのGETで情報取得してシートに書き出したい
で書いたコードの応用です。
zendeskのAPIで一度に取得できるチケット情報は100件ずつのようです。
そのため、101件以上ある場合は100で割った値の小数点以下を繰り上げて、
その回数分繰り返すようにしています。
コード.gs
var host = 'SITENAME.zendesk.com';
var endPoint = 'https://API_ID.execute-api.us-east-1.amazonaws.com/default/get_zendesk_ticket';
var ss_url = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0';
//これを実行する
function getZendeskInfo() {
var response = run(1);
var objs = JSON.parse(response)["results"];
var count = JSON.parse(response)["count"];
objsToSheet(objs);
runLoop(count);
}
//101件以上ある場合はループで全部とりに行く
function runLoop(count) {
if(count > 101) {
var looptime = Math.ceil(count / 100);
for(var i = 1; i < looptime; i++) {
var response = run(i + 1);
var objs = JSON.parse(response)["results"];
objsToSheet(objs);
}
}
}
//受け取ったpageNumのデータを取得して返す
function run(pageNum) {
var path = '/api/v2/search.json?page=' + pageNum + '&query=created%3E2019-01-01%20type:ticket';
var payload = {
'data':{
'host': host,
'path': path,
'zendesk_api_token_base64': getProp('zendesk_api_token_base64')
}
}
var options = {
'method': 'post',
'headers': get_headers(),
'contentType': 'application/json',
'payload': JSON.stringify(payload)
}
var response = UrlFetchApp.fetch(endPoint, options);
Logger.log(JSON.parse(response)["results"].length)
return response;
}
//API GatewayのAPI KEY
function get_headers() {
var headers = {
"x-api-key": getProp('x_api_key')
}
return headers;
}
//スクリプトのプロパティから値を取得する
function getProp(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
//書き込むシート
function targetSheet() {
var ss = SpreadsheetApp.openByUrl(ss_url);
var sheet = ss.getSheets()[0];
return sheet;
}
//シートに書き込むデータを渡す
function objsToSheet(objs) {
var sheet = targetSheet();
var obj = objs[0];
var keys = Object.keys(obj);// ヘッダーの値
setSheetHeader(sheet, [keys]);// 一行目に見出しを入れる
var arrays = [];
for(var i = 0; i < objs.length; i++) {
var obj = objs[i];
var values = [];
for(var j = 0; j < keys.length; j++) {
var value = obj[keys[j]];
values.push(value);
}
arrays.push(values);
}
setDataToSheet(sheet, arrays)
}
//シートにデータを書き込む
function setDataToSheet(sheet, arrays){
var last_row = sheet.getLastRow();
var start_row = last_row + 1;
var start_col = 1;
var num_rows = arrays.length;
var num_cols = arrays[0].length;
var range = sheet.getRange(start_row, start_col, num_rows, num_cols);
range.setValues(arrays);
}
//シートの一行目に見出しを書き込む
function setSheetHeader(sheet, arrays) {
var start_row = 1;
var start_col = 1;
var num_rows = 1;
var num_cols = arrays[0].length;
var range = sheet.getRange(start_row, start_col, num_rows, num_cols);
range.setValues(arrays);
}
//base64tokenを作成する ここで実行したログの値をスクリプトのプロパティに入れておく
function get_base64() {
var zendesk_api_token = "ZENDESK_API_TOKEN";
var base64Token = Utilities.base64Encode("EMAIL" + '/token:' + zendesk_api_token);
Logger.log(base64Token);
}
|
Lambda側のindex.jsは
GASからLambdaにzendesk_idを渡してzendesk APIのGETで情報取得してシートに書き出したい
に書かれているものと同じです。