触发不适用于Google Analytics的gs代码

时间:2014-11-06 12:31:23

标签: google-apps-script google-analytics google-sheets google-analytics-api

我有一张图表可供开发。我已使用Google Docs的电子表格发布了该图表。我希望图表能够随着数据的任何变化自动更新。因此,我每天都会在午夜1点设置一个触发器,方法是转到工具>脚本编辑器>资源>在Google电子表格中触发。

但是,这不起作用,发布的图表没有更新。

我添加了触发器的代码如下:

function runDemo() {
  try {

    var firstProfile = getFirstProfile();
    var results = getReportDataForProfile(firstProfile);
    outputToSpreadsheet(results);

  } catch(error) {
    Browser.msgBox(error.message);
  }
}


function getFirstProfile() {
  var accounts = Analytics.Management.Accounts.list();
  if (accounts.getItems()) {
    var firstAccountId = accounts.getItems()[0].getId();

    var webProperties = Analytics.Management.Webproperties.list(firstAccountId);
    if (webProperties.getItems()) {

      var firstWebPropertyId = webProperties.getItems()[0].getId();
      var profiles = Analytics.Management.Profiles.list(firstAccountId, firstWebPropertyId);

      if (profiles.getItems()) {
        var firstProfile = profiles.getItems()[0];
        return firstProfile;

      } else {
        throw new Error('No views (profiles) found.');
      }
    } else {
      throw new Error('No webproperties found.');
    }
  } else {
    throw new Error('No accounts found.');
  }
}

function getReportDataForProfile(firstProfile) {

  var profileId = firstProfile.getId();
  var tableId = 'ga:' + profileId;
  var startDate = getLastNdays(14);   // 2 weeks (a fortnight) ago.
  var endDate = getLastNdays(0);      // Today.

  var optArgs = {
    'dimensions': 'ga:date',              // Comma separated list of dimensions.
    'sort': '-ga:date,ga:sessions',       // Sort by sessions descending, then keyword.
    'segment': 'dynamic::ga:isMobile==No',  // Process only mobile traffic.
    //'filters': 'ga:source==google',          // Display only google traffic.
    'start-index': '1',
    'max-results': '250'                     // Display the first 250 results.
  };

  // Make a request to the API.
  var results = Analytics.Data.Ga.get(
      tableId,                    // Table id (format ga:xxxxxx).
      startDate,                  // Start-date (format yyyy-MM-dd).
      endDate,                    // End-date (format yyyy-MM-dd).
      'ga:sessions,ga:pageviews', // Comma seperated list of metrics.
      optArgs);
  //{‘dimensions’: ‘ga:date’}

  if (results.getRows()) {
    return results;

  } else {
    throw new Error('No views (profiles) found');
  }
}

function getLastNdays(nDaysAgo) {
  var today = new Date();
  var before = new Date();
  before.setDate(today.getDate() - nDaysAgo);
  return Utilities.formatDate(before, 'GMT', 'yyyy-MM-dd');
}

function outputToSpreadsheet(results) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Print the headers.
  var headerNames = [];
  for (var i = 0, header; header = results.getColumnHeaders()[i]; ++i) {
    headerNames.push(header.getName());
  }
  sheet.getRange(1, 1, 1, headerNames.length)
      .setValues([headerNames]);

  // Print the rows of data.
  sheet.getRange(2, 1, results.getRows().length, headerNames.length)
      .setValues(results.getRows());

  //for(var i=2; results.getRows().length; i++)
  //{
   // sheet.getRange(i, 1).getNumberFormat();
  //}
  //sheet.getRange(2, 1, results.getRows().length).setNumberFormat('Plain text');
}

我将触发器放在函数runDemo()

任何人都可以帮我这样做。

1 个答案:

答案 0 :(得分:1)

鉴于提供的代码,我会关注您的故障排除工作。

1)定义具有特定 Property ID getFirstProfile()版本:

function getFirstProfile() {  

  var accounts = Analytics.Management.Accounts.list();

  if (accounts.getItems()) {
        var profile = Analytics.Management.Profiles.list('XXXXXXX',
                                                   'UA-XXXXXXX-1'); //Google Analytics Profile ID
  } else {
        throw new Error('No views (profiles) found.');
  }
}

2)Define a number for your profile ID

function getReportDataForProfile(firstProfile) {

  //var profileId = profile.getId();
  var tableId = 'ga:xxxxxxxx'; // digits;

与此同时,使用脚本编辑器中提供的工具来获取有问题区域的其他提示。

screenshot

让我们知道它是怎么回事。