ShinyAds/node-google-dfp

View on GitHub
examples/runReport.js

Summary

Maintainability
A
1 hr
Test Coverage
// run a report on line item #1234567

var Dfp = require('node-google-dfp');
var dfpConfig = require('./dfpCredentials');

var dfpUser = new Dfp.User(dfpConfig.networkCode, dfpConfig.applicationName);
dfpUser.setSettings(dfpConfig);

dfpUser.getService('ReportService', function (err, reportService) {
  if (err) {
    return console.error(err);
  }

  var results = null;
  var args = {
    reportJob: {
      reportQuery: {
        dimensions: ['DATE'],
        columns: [ 'AD_SERVER_CLICKS', 'AD_SERVER_IMPRESSIONS' ],
        dimensionAttributes : [],
        startDate: { year: 2014, month: 5, day: 22 },
        endDate: { year: 2014, month: 6, day: 21 },
        dimensionFilters : [],
        statement: { query : 'WHERE LINE_ITEM_ID = 123456789'}
      }
    }
  };


  function download_report(download_url, local_filename) {
    var https = require('https');
    var fs = require('fs');
    var zlib = require('zlib');

    var file = fs.createWriteStream(local_filename);
    https.get(download_url, function (response) {
      response.pipe(zlib.createGunzip()).pipe(file);
    });
  }


  function check_report_ready() {

    var reportId = results.rval.id;
    console.log('Trying to get report #' + reportId);

    reportService.getReportJobStatus({reportJobId : reportId}, function (err, data) {

      if (err) {
        return console.log('ERROR', err);
      }
      console.log('Report Job #' + reportId + ' returned ' + data.rval);

      if (data.rval === 'COMPLETED') {

        var download_args = {
          reportJobId           : reportId,
          reportDownloadOptions : {
            exportFormat            : 'CSV_EXCEL',
            includeReportProperties : false,
            includeTotalsRow        : false,
            useGzipCompression      : true
          }
        };

        reportService.getReportDownloadUrlWithOptions(download_args, function (err, data) {
          if (err) {
            return console.log('ERROR', err.body);
          }

          console.log("Downloading report from " + data.rval);
          download_report(data.rval, 'downloaded_report.csv');
        });
      }

      if (data.rval === 'FAILED') {
        console.log('Report Failed!');
      }

      if (data.rval === 'IN_PROGRESS') {
        setTimeout(check_report_ready, 100);
      }

    });
  }

  reportService.runReportJob(args, function (err, jobStatus) {
    if (err) {
      return console.log('ERROR', err.body);
    }

    results = jobStatus;
    setTimeout(check_report_ready, 100);

  });

});