Я работаю со сторонним API (от компании Simpli.fi) в Google Apps Script , чтобы перенести некоторые данные в электронную таблицу. Я могу очень хорошо аутентифицировать мой вызов API и получить все необходимые данные по одному URL. Проблема в том, что URL для вызова этого API отформатирован следующим образом:
https://app.simpli.fi/api/organizations/{CLIENT_ID}/{SOME_ENDPOINT}
Это работает, когда я подключаю один идентификатор клиента и одну конечную точку, однако я не хочу получать данные отдельно для каждого клиента с каждой конечной точкой данных.
Я хочу получить данные обо всех моих клиентах, а также хочу получить доступ к нескольким конечным точкам, таким как "/audiences
" или "/campaigns
". Я надеюсь, что есть способ (подобный Promises в JavaScript ), который я могу перебирать по нескольким URL-адресам для получения всех данных из API.
На данный момент я просто концентрируюсь на извлечении всех данных, которые я хочу, из конечной точки "/audiences
" для всех моих клиентов. Я настроил массив для доступа к моему Google Sheet , который содержит все клиентские коды, и вставил его в URL с помощью цикла for, который работает просто отлично:
// iterate through all URL endpoints and client codes
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('formatting');
var range = sheet.getRange(['B2:B']).getValues();
var clients = range.filter(String);
var urlOneArray = [];
for (var i = 0; i < clients.length; i++) {
var urlOne = [baseURL + clients[i] + '/audiences'];
for (var j = 0; j < urlOne.length; j++) {
urlOneArray = urlOne[j];
Logger.log(urlOneArray);
}
}
Вышеприведенный журнал регистрирует список каждого встроенного URL по желанию.
После добавления всех встроенных URL-адресов в urlOneArray
я попытался позвонить с помощью UrlFetchApp.fetchAll
:
for (i=0; i < urlOneArray.length; i++) {
var response = UrlFetchApp.fetchAll(urlOneArray[i], params);
Utilities.sleep(500);
Logger.log(response);
}
При попытке использовать этот метод я получаю эту ошибку:
"Не удается найти метод fetchAll (строка, объект). (Строка 35, файл" Код ")"
Если есть способ перебирать несколько URL-адресов для сбора всех данных из API в одно нажатие, я был бы очень признателен за некоторые указатели.
Вот полный скрипт:
// authenticate API call
var X_USER_KEY = 'XXXX';
var X_APP_KEY = 'XXXX';
function simplifiService() {
var baseURL = 'https://app.simpli.fi/api/organizations';
// iterate through all URL endpoints and client codes
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('formatting');
var range = sheet.getRange(['B2:B']).getValues();
var clients = range.filter(String);
var urlOneArray = [];
for (var i = 0; i < clients.length; i++) {
var urlOne = [baseURL + clients[i] + '/audiences'];
for (var j = 0; j < urlOne.length; j++) {
urlOneArray = urlOne[j];
Logger.log(urlOneArray);
}
}
var params = {
method: 'GET',
headers: {
"x-app-key": X_APP_KEY,
"x-user-key": X_USER_KEY
},
muteHttpExceptions: true
}
for (i=0; i < urlOneArray.length; i++) {
var response = UrlFetchApp.fetchAll(urlOneArray[i], params);
Utilities.sleep(500);
Logger.log(response);
}
if (response.getResponseCode() === 200) {
var data = JSON.parse(response);
Logger.log(data);
} else {
Logger.log('Error: ' + response.getResponseCode());
}
getData(data);
}
// parse out JSON data
function getData(data) {
var date = new Date();
var geoFenceId = data.audiences;
var geoFenceName = data.audiences[0].name;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Campaign Data');
//sheet.appendRow([date, geoFenceId, geoFenceName]);
}