偏移量/同时循环问题-使用Google Apps脚本从列表中下载mailchimp“成员”数据

嘿,我正在尝试编写一个将所有Mailchimp email addresses和状态都存储到Google工作表中的Google Apps脚本。但是,它在第​​一个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);
  };
}
aaazhq 回答:偏移量/同时循环问题-使用Google Apps脚本从列表中下载mailchimp“成员”数据

此API的结果是分页的。请参阅MailChimp的Getting Started指南中的分页部分。对于这些类型的API,这种分页是相当典型的。

对于每个GET请求,您需要为每页结果数设置count。 (我看到您已经完成了此操作,但是我认为您有错别字。您的代码中有“ 10000”而不是“ 1000”。)

您还需要设置offset才能在上一页的最后一个结果之后开始每个页面的结果。因此,如果您的count为1000,则每次需要将偏移量增加一千:

offset = offset + 1000

最后,要设置keep_going布尔值,您需要检查下一个偏移量是否超过结果总数。这个特定的端点返回一个total_items属性,您可以使用该属性进行比较:

keep_going = offset > total_items

请确保在进行了比较后 更新了偏移量(与代码中当前的内容相反)。否则,您将检查刚刚发出的请求的偏移量。

P.S。您需要重新编写原始的endpoint定义,以便不对偏移值进行硬编码,因为您需要在while循环中重新编写该值。我建议:

var endpoint = 'lists/' + LIST_ID + '/members?count=10000&offset=';
本文链接:https://www.f2er.com/2982996.html

大家都在问