如何从多个Mailchimp端点提取数据?

时间:2019-11-30 12:20:23

标签: google-apps-script google-sheets mailchimp-api-v3.0

下面的代码从Mailchimp API Reports端点提取数据,并将其添加到表格中。

我想从其他端点添加更多数据(例如“ List / Audience”端点的字段:member_count,total_contacts),但是对此没有灵巧的解决方案。

这里的最佳做法/解决方案是什么?该任务可以保留在相同的功能中还是可以单独使用?

我是这个领域的新手,所以请多多包涵:)

nvl2(Cn,1,0)

1 个答案:

答案 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的更多信息。调用此方法将返回多个可以迭代的响应对象。