google-apps-script - 偏移量/while 循环问题 - 使用 google 应用程序脚本从列表中下载 mailchimp 'members' 数据
问题描述
嘿,我正在尝试编写一个 google 应用程序脚本,将所有Mailchimp 电子邮件地址和状态放入 Google 表格中。但是,它在前 1,000 个之后停止,我无法确定完成这项工作所需的偏移量/get_all。
function mailchimpMembers() {
// URL and params for the Mailchimp API
var root = 'https://us19.api.mailchimp.com/3.0/';
var endpoint = 'lists/' + LIST_ID + '/members?offset=0&count=10000';
var params = {
'method': 'GET',
'muteHttpExceptions': true,
'headers': {
'Authorization': 'apikey ' + API_KEY
}
};
try {
// call the Mailchimp API
var keep_going = true;
var offset = 0;
var memberList = new Array();
memberList.push(["email","status"]);
while(keep_going) {
var response = UrlFetchApp.fetch(root+endpoint+offset, params);
var data = response.getContentText();
var json = JSON.parse(data);
keep_going = json["get_all"];
offset = json.offset;
var listGrowth = json['members'];
listGrowth.forEach(function(el) {
memberList.push([el.email_address, el.status]);
});
Logger.log(memberList);
};
writeResults("list",memberList);
}
catch (error) {
Logger.log(error);
};
}
解决方案
此 API 的结果是分页的。请参阅MailChimp入门指南中的分页部分。这种类型的分页对于这些类型的 API 来说是相当典型的。
对于每个 GET 请求,您需要设置count
每页的结果数。(我看到你已经这样做了,但我认为你有一个错字。你的代码中有“10000”而不是“1000”。)
您还需要设置offset
在上一页的最后一个结果之后开始每一页的结果。因此,如果您count
是 1000,则每次需要将偏移量增加一千:
offset = offset + 1000
最后,要设置keep_going
布尔值,您需要检查下一个偏移量是否超过结果总数。此特定端点返回一个total_items
属性,您可以将其用于此比较:
keep_going = offset > total_items
确保在更新偏移量后进行此比较(与当前代码中的内容相反)。否则,您将检查您刚刚提出的请求的偏移量。
PS您需要重新编写原始endpoint
定义以不对偏移值进行硬编码,因为您需要在while循环中重新编写此值。我建议:
var endpoint = 'lists/' + LIST_ID + '/members?count=10000&offset=';
推荐阅读
- python - 当尚未分配实际值时,python应该将类变量初始化为虚拟值吗?
- macos - 翻转 macOS 金属质感
- java - 使用带有 for 循环更改数据的 switch 语句检索
- python - Firebase Firestore 事务和线程 - python
- python - 更新不改变 PySimpleGUI 中的可见性
- powerbi - Power BI 堆叠条作为具有里程碑的时间线
- python - 从二进制到base 48的转换
- python-3.x - pyimport运行python3程序出错
- amazon-web-services - AWS SNS 从 Ec2 独立 Java 应用程序推送到 android 手机
- python - gem5 "ImportError: No module named Six" 即使安装了模块六