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

问题描述 投票:0回答:1

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

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

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

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

function chimpCampaigns() {
var API_KEY = 'X'; // MailChimp API Key
var REPORT_START_DATE = '2018-01-01 15:54:00'; // Report Start Date (ex. when you sent your first MailChimp Newsletter)

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("CampaignData");

var dc = API_KEY.split('-')[1];
var api = 'https://'+ dc +'.api.mailchimp.com/3.0';
var count = 100; // Max rows to return

var campaignList = '/campaigns?&count='+count+'&since_send_time='+REPORT_START_DATE
var options = {"headers": {"authorization": 'apikey '+API_KEY}};
    var apiCall = function(endpoint){
        apiResponseCampaigns = UrlFetchApp.fetch(api+endpoint,options);
        json = JSON.parse(apiResponseCampaigns);
        return json
    }

var campaigns = apiCall(campaignList);
var total = campaigns.total_items;
var campaignData = campaigns.campaigns;

 if (campaignData) {
    sheet.clear(); // Clear MailChimp data in Spreadsheet
   // Append Column Headers
    sheet.appendRow(["Sent Time", "Campaign ID", "Audience", "Campaign Title", "Subject Line", "Emails Sent", "Abuse Reports", "Unsubscribed", "Unsubscribe Rate", "Hard Bounces", "Soft Bounces", "Bounces Total", "Syntax Errors", "Forwards Count", "Forwards Opens", "Opens Total", "Unique Opens", "Open Rate", "Last Open", "Clicks Total", "Unique Clicks","Unique Subscriber Clicks", "Click Rate", "Last Click"]);
  }  

for (i=0; i< campaignData.length; i++){
    var c = campaignData[i];
    var cid = c.id;
    var title = c.title;
    var subject = c.subject;
    var send_time = c.send_time;

    if (send_time){
        apiResponseReports = UrlFetchApp.fetch('https://'+ dc +'.api.mailchimp.com/3.0/reports/'+cid,options);
        reports = JSON.parse(apiResponseReports);
        reportsSendTime = reports.send_time;
        if(reportsSendTime){

          var campaign_title = c.settings.title;
          var subject_line = c.settings.subject_line;
          var emails_sent = reports.emails_sent;
          var list_name = reports.list_name;            
          var fields = reports.fields;           
          var abuse_reports = reports.abuse_reports;
          var unsubscribed = reports.unsubscribed;       
          var unsubscribe_rate = unsubscribed/emails_sent;
          var hard_bounces = reports.bounces.hard_bounces;
          var soft_bounces = reports.bounces.soft_bounces;
          var bounces = hard_bounces+soft_bounces;
          var syntax_errors = reports.bounces.syntax_errors;
          var forwards_count = reports.forwards.forwards_count;
          var forwards_opens = reports.forwards.forwards_opens;
          var opens_total = reports.opens.opens_total;
          var unique_opens = reports.opens.unique_opens;
          var open_rate = reports.opens.open_rate;
          var last_open = reports.opens.last_open;
          var clicks_total = reports.clicks.clicks_total;
          var unique_clicks = reports.clicks.unique_clicks;
          var unique_subscriber_clicks = reports.clicks.unique_subscriber_clicks;
          var click_rate = reports.clicks.click_rate;
          var last_click = reports.clicks.last_click;

          // the report array is how each row will appear on the spreadsheet
          var report = [send_time, fields, cid, list_name, campaign_title, emails_sent, subject_line, abuse_reports, unsubscribed, unsubscribe_rate, hard_bounces, soft_bounces, bounces, syntax_errors, forwards_count, forwards_opens, opens_total, unique_opens, open_rate, last_open, clicks_total, unique_clicks, unique_subscriber_clicks, click_rate, last_click];

      sheet.appendRow(report);
      }
    }
  }
}
google-apps-script google-sheets mailchimp-api-v3.0
1个回答
0
投票

您可以使用错误优先模式连续调用每个端点。有关here的更多信息。如果您之前的调用返回了数据并且没有出错,则将下一个函数作为回调传递,等等。

function getCustomers(req, callback) {
   //Simplified API call
  var res = UrlFetchApp.fetch("/customers", req);
  if (res.getStatusCode() == 200) {

      var customers = JSON.parse(res.getContentText());
      callback(false, customers);

  } else {
     callback("Error: Server responded with the status code of " + res.getStatusCode());
   }

 }

如果您有许多调用多个端点并使用此错误优先模式的函数,则可以像这样将它们组合起来:

var rows = [];
getCustomers(req, function(err, customers){
  //if no error and there are customers
  if(!err && customers) {
       //fill customer rows
      getDiscounts(req, function(err, discounts){

          //repeat the same thing

      });
  } else {
     //handle the error
     showError(error);
  }

});
© www.soinside.com 2019 - 2024. All rights reserved.