2017-01-24 15 views
1

Google App Scriptは新しくなっています。 Google-app-script機能を使用してSpreadsheet内でレポートを作成する必要があります。私はDCM/DFMからexcistingレポートをスプレッドシートにダウンロードする方法を知っています。google-app-scriptを通じてDCMレポートを作成

DCM/DFMから既存のレポートをダウンロードせずに新しいスプレッドシートを作成できませんでした。出来ますか?誰かがサンプルを持っているかもしれません(私は見つけられませんでした)?それとも、コンセプトが欠落していて、データをスプレッドシートに取り込む唯一の方法は、まずDCM/DCF Report Builderでレポートを作成することですか?

ここに私が使用しているコードがあります。

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

エラーMesssage:

は未定義のオブジェクトのプロパティ "apiUrl" を読み取ることができません。

+0

;'ですスクリプトが結果を抽出しようとするまでに完了しない非同期呼び出し。 –

+0

FYIレポートリソースの応答オブジェクトにurlプロパティがありません。 https://developers.google.com/doubleclick-advertisers/v2.7/reports#resource –

+0

ありがとう、最後に私は問題を1)google-app-scriptを通して新しいレポートを作成して販売しました2) DCMとスプレッドシート – NataliS

答えて

0

私の最後のスクリプトは次のとおりです。私がDoubleClickのAPIに精通していないんだけど、それは `DoubleClickCampaigns.Reports.insert(リソース、プロファイルID)のように感じている

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

関連する問題