gpt4 book ai didi

javascript - 如何迭代多个 URL 以在 Google Apps 脚本中获取 JSON 响应?

转载 作者:行者123 更新时间:2023-11-29 16:31:19 24 4
gpt4 key购买 nike

我正在使用Google Apps 脚本中的第三方API(来自名为 Simpli.fi 的公司)将一些数据提取到电子表格中。我能够很好地验证我的 API 调用,并且可以通过一个 URL 提取我所需的所有数据。问题是调用此 API 的 URL 的格式如下:

https://app.simpli.fi/api/organizations/ {CLIENT_ID}/{SOME_ENDPOINT}

当我插入一个客户端 ID 和一个端点时,它可以工作,但我不想为每个客户端的每个数据端点单独提取数据。

我希望提取所有客户的数据,并希望访问多个端点,例如“/audiences”或“/campaigns”。我希望有一种方法(类似于 JavaScript 中的 Promises)可以迭代多个 URL 以从 API 获取所有数据。

目前,我只是专注于从所有客户的“/audiences”端点提取我想要的所有数据。我已经设置了一个访问我的 Google Sheet 的数组,其中包含所有客户端代码,并使用 for 循环将其插入 URL,效果很好:

// 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);
}

当尝试使用此方法时,我收到此错误:

"Cannot find method fetchAll(string,object). (line 35, file "Code")"

如果有一种方法可以迭代多个 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]);
}

最佳答案

问题:

  • 语法无效: UrlFetchApp.fetchAll(requests Object[])接受对象数组,同时提供字符串和对象作为参数。

解决方案:

  • 有效语法:为每个端点/客户端创建一个对象数组,并将其作为参数提供给 fetchAll()

片段:

function copyParams() {//shallow clone params object
for (var i in params) {
this[i] = params[i];
}
}
var endPoints = ['/audiences', '/campaigns'];
var requests = [];
var url, obj;
clients.forEach(function(client) {
endPoints.forEach(function(endPoint) {
obj = new copyParams();
url = baseUrl + '/' + client[0] + endPoint;
obj.url = url;
requests.push(obj);
});
});
console.log(requests);
var responseArray = UrlFetchApp.fetchAll(requests);
console.log(responseArray);

引用文献:

关于javascript - 如何迭代多个 URL 以在 Google Apps 脚本中获取 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com