【问题标题】:creating DCM report through google-app-script通过 google-app-script 创建 DCM 报告
【发布时间】:2017-01-24 09:04:28
【问题描述】:

我对 Google 应用脚本还很陌生。我需要使用 Google-app-script 功能在电子表格中构建报告。我知道如何从 DCM/DFM 报告现有报告下载到电子表格。

但我未能在未从 DCM/DFM 下载现有报告的情况下创建新的内部电子表格。是否可以?可能有人有样品(我没有找到)?或者我错过了这个概念,将数据拉入电子表格的唯一方法是首先在 DCM/DCF 报表生成器中创建报表?

这是我正在使用的代码。

function generateReport() {                                              
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Reports');
  var profileId = 2623334
  var httpOptions = {
        'headers': {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}
    }

  var resource = {
  
    'kind': 'dfareporting#report',
    'accountId': '34405',
    'type': 'STANDARD',
    'name': 'Simple Report',
    'criteria': {
    'dateRange': {
      'kind': 'dfareporting#dateRange',
      'startDate': '2016-09-01',
      'endDate': '2017-01-22',
    },
    'dimensions': [
      {
        'kind': 'dfareporting#sortedDimension',
        'name': 'dfa:date',
      }
    ],
   'metricNames': [
      'dfa:clicks', 'dfa:impressions'
    ],
  }
  }
  
  var url = DoubleClickCampaigns.Reports.insert(resource, profileId);
  var report =  UrlFetchApp.fetch(url.urls.apiUrl, httpOptions);  
  for (var i=0; i<report.length; i++) {
    var row = report[i];
    sheet.getRange('A' + String(i+2)).setValue(row[0]);
    sheet.getRange('B' + String(i+2)).setValue(row[1]);
    sheet.getRange('C' + String(i+2)).setValue(row[2]);
  }
}

错误出现在这里:

var report =  UrlFetchApp.fetch(url.urls.apiUrl, httpOptions); 

错误信息:

无法读取未定义对象的属性“apiUrl”。

【问题讨论】:

  • 我不熟悉 Doubleclick api,但感觉 DoubleClickCampaigns.Reports.insert(resource, profileId); 是一个异步调用,在脚本继续尝试提取结果时可能尚未完成。
  • 仅供参考 报告资源响应对象没有 url 属性。 developers.google.com/doubleclick-advertisers/v2.7/…
  • 谢谢,我终于解决了这个问题 1) 通过 google-app-script 创建新报告 2) 将此报告从 DCM 下载到电子表格

标签: google-apps-script


【解决方案1】:

我的最终脚本是:

function generateReport() {                                                 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Reports');
  var startDate = Browser.inputBox("Enter a start date (format: 'yyyy-mm-dd')");
  var endDate = Browser.inputBox("Enter an end date (format: 'yyyy-mm-dd')");
  var ReportName = Browser.inputBox("Enter your future report name");
  var profileId = 2623334; 
  var resource = {
    'kind': 'dfareporting#report',
    'accountId': '34405',
    'type': 'STANDARD',
    'name': ReportName,
    'criteria': {
       'dateRange': {
           'kind': 'dfareporting#dateRange',
           'startDate': startDate,
           'endDate': endDate,
                   },
       'dimensions': [
                       {
                         'kind': 'fareporting#sortedDimension',
                         'name': 'dfa:date'
                       }
                    ],
        'metricNames': [
      'dfa:clicks', 'dfa:impressions'
                       ],
                },
              };
  
  var httpOptions = {
        'headers': {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}
    }
  var url = DoubleClickCampaigns.Reports.insert(resource, profileId);                   //create Report inside DCM
  var newReportId = Number(url.id);  //get id of new Report  
  var additionalParameters = {
    'synchronous': 'true'
  };
  var newReportRun = DoubleClickCampaigns.Reports.run(profileId, newReportId, additionalParameters);          // run new Report in DCM
  var newReportFileId = Number(newReportRun.id);  //get id of New File
  var newReportFile = DoubleClickCampaigns.Files.get(newReportId, newReportFileId);     
    if(newReportFile.urls) {
      var httpOptions = {
        'headers': {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}             
      }
      var contents = UrlFetchApp.fetch(newReportFile.urls.apiUrl, httpOptions);              //Makes a request to fetch (получать) a URL using optional advanced parameters
      if(newReportFile.format == 'CSV') {                                                 
   
        var rows = Utilities.parseCsv(contents.getContentText());                                   
        if(rows && rows.length) {
          var fileName = "DCM_test_work5";
          var spreadSheet = SpreadsheetApp.create(fileName);
          var sheet = spreadSheet.getActiveSheet();
          rows.map(function(r) { sheet.appendRow(r); });
        }
      } else {
      // Store the Excel file directly
        Logger.log('not CSV!');
        DocsList.createFile(contents.getBlob()).rename(newReportFile.fileName)
      }  
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多