2017-01-24 13 views
1

Google App Script는 새로운 버전입니다. 스프레드 시트에서 Google-app-script 기능을 사용하여 보고서를 작성해야합니다. excisting 보고서를 스프레드 시트로보고하는 DCM/DFM에서 다운로드하는 방법을 알고 있습니다.google-app-script를 통해 DCM 보고서 작성

하지만 기존 보고서를 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"를 읽을 수 없습니다.

+0

나는 더블 API를 잘 알고 아니에요하지만 (자원 profileID가)를 DoubleClickCampaigns.Reports.insert'같은 느낌;'이다 결과를 추출하려고 할 때 스크립트가 움직일 때까지 완료되지 않을 수도있는 비동기 호출. –

+0

FYI 보고서 리소스 응답 개체에 url 속성이 없습니다. https://developers.google.com/doubleclick-advertisers/v2.7/reports#resource –

+0

고맙습니다. 마침내 문제를 팔았습니다. 1) google-app-script를 통해 새 보고서 작성 2)에서이 보고서 다운로드 DCM에서 스프레드 시트 – NataliS

답변

0

내 최종 스크립트입니다 :

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