简体   繁体   中英

creating DCM report through google-app-script

I am fairly new to Google App Scripts. I need to build report inside Spreadsheet using Google-app-script functionality. I know how to download from DCM/DFM reporting excisting report to spreadsheet.

But I've failed to create new inside spreadsheet without downloading existing report from DCM/DFM. Is it possible? May be somebody has a sample (I hadn't found)? Or I've missed the concept and the only way to pull data into Spreadsheet is to create the report in DCM/DCF Report Builder first?

Here is the code i'm using.

 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]); } } 

The error appears here:

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

Error Messsage:

Can not read property "apiUrl" of undefined object.

My final script is:

 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) } } } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM