下面的代码从Mailchimp API Reports端点提取数据,并将其添加到表格中。
我想从其他端点添加更多数据(例如“ List / Audience”端点的字段:member_count,total_contacts),但是对此没有灵巧的解决方案。
这里的最佳做法/解决方案是什么?该任务可以保留在相同的功能中还是可以单独使用?
我是这个领域的新手,所以请多多包涵:)
nvl2(Cn,1,0)
答案 0 :(得分:0)
您可以使用错误优先模式连续调用每个端点。有关here的更多信息。 如果您之前的调用返回了数据并且没有出错,则将下一个函数作为回调传递,依此类推。 在下面的示例中,我省略了构建URL端点,查询字符串和'options'对象的逻辑,因为可以从您的代码中简单地借用这些对象。 基本上,您为每个API端点定义一个带有回调参数的函数。 每当需要调用多个端点时,都可以创建一个第三个函数来连续调用它们,并将每个新函数调用作为参数传递给上一个端点。 内部函数仍然可以访问外部作用域,因此您可以在执行上一次调用后合并来自多个端点的数据(前提是您为返回的数据分配了唯一的名称-“广告系列”,“报告”等)
//function for the 'campaings' endpoint
function getCampaings(options, callback) {
//API call
var response = UrlFetchApp.fetch(campaignsEndpoint, options);
if (res.getStatusCode() == 200) {
var campaigns = JSON.parse(res.getContentText());
callback(false, campaigns);
} else {
callback("Error: Server responded with the status code of " + res.getStatusCode());
}
}
在使用相同方法创建了用于调用“报告”端点的函数之后,请在第3个函数中合并调用。
function getCampaignsAndReports(){
var combinedData = {};
getCampaigns(options, function(err, campaigns){
if (!err && campaigns) {
//Call is successful - proceed to the next call
getReports(options, function(err, reports){
//Call successful
if (!err && reports) {
//Proceed to the next call or combine data from
//multiple endpoints
combinedData.campaigns = campaigns.campaigns;
combinedData.reports = reports.reports;
//write to sheet
//...
} else {
//Error calling reports endpoint
throw err;
}
});
} else {
//Error calling 'campaigns' endpoint. Throw error or write
//another function to show it to the user
throw err;
}
});
}
这可能因MailChimp API数据的结构而异,因此请相应地更改代码。另外,如果需要为“ campaings”端点中的每个条目多次调用“ reports”端点,则可以使用UrlFetchApp.fetchAll(request [])更改函数以处理多个请求(选项)对象。有关here的更多信息。调用此方法将返回多个可以迭代的响应对象。