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で情報取得してシートに書き出したい
に書かれているものと同じです。