Google API для Google Таблиц — ввод нескольких показателей

#google-apps-script #google-sheets #google-api

#google-apps-script #google-sheets #google-api

Вопрос:

Я использую скрипт API для ввода одной метрики для Google Таблиц в режиме реального времени. Я могу заставить работать одну метрику, но я не могу понять, как использовать более одной и отображать ее на листе.

 // get time stamp of query run
function setTimeStamp(sheetName) {
SpreadsheetApp.getActive().getSheetByName(sheetName)
.getRange('C2').setValue(new Date())
}

// gaGet data
function gaGet(tableId, metrics, options) {
    // Apply standard options
    options = options || {};
    options['max-results'] = options['max-results'] || '10000';
    // If errors persist up to 5 times then terminate the program.
    for (var i = 0; i < 5; i  ) {
        try {
          return Analytics.Data.Realtime.get(tableId, metrics, options); // 503
        } catch (err) {
          // https://developers.google.com/analytics/devguides/reporting/core/v3/coreErrors
          if (err.message.indexOf('a server error occurred') > -1) {
            Logger.log('Backend Error');
            // Note: Don't listen to Google's reply and retry request after 2 minutes
            Utilities.sleep(2 * 60 * 1000);
          } else if (err.message.indexOf('User Rate') > -1) {
            Logger.log('Rate Limit Error');
            // Exponential Backoff
            Utilities.sleep(1000 * Math.pow((i   1), 2));
          } else if (err.message.indexOf('too many concurrent connections') > -1) {
            Logger.log('Concurrent Connections Error');
            // Exponential Backoff
            Utilities.sleep(1000 * Math.pow((i   1), 2));
          } else {
            Logger.log(err);
            throw err;
          }
        }
    }
    throw 'Error. Max retries reached';
  }

// rt pages query
function getRtPages(){
    
    // set up the parameters  and variables
    var sheetName = 'web'; // The name of the sheet (not the Spreadsheet) we want to write the data e.g Sheet1
    var tableId = 'ga:214164114'; // The id of the view to query the data from e.g ga:123456
    //var startDate = 'yyyy-MM-dd'; // The start date of the query with the appropriate format e.g 2018-04-01 (1 April 2018)
    //var endDate = 'yyyy-MM-dd'; // The end date of the query with the appropriate format e.g 2018-04-30 (30 April 2018)
   
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getSheetByName(sheetName);
   

    // set Up the query arguments
  var metrics = ['rt:pageviews'];
  var options = {
        'dimensions': 'rt:pagePath',
        //'filters': '',
        'sort': '-rt:pageviews',
        //'segment': '',
        'samplingLevel': 'HIGHER_PRECISION',
        'max-results': '100' // To limit the results to 100. Maximum number of results: 10000

       }

  var metrics2 = ['rt:activeUsers'];
  var options2 = {
        'dimensions': 'rt:country',
        //'filters': '',
        'sort': '-rt:activeUsers',
        //'segment': '',
        'samplingLevel': 'HIGHER_PRECISION',
        'max-results': '100' // To limit the results to 100. Maximum number of results: 10000

        }


    // fetch the report
    var report = gaGet(tableId, metrics, options, metrics1, options1);
  
    // clear current sheet data  
    var range = sheet.getRange("A2:D101");
    range.clear();


    // fetch the report
    var report = gaGet(tableId, metrics, options);
  
    // clear current sheet data  
    var range = sheet.getRange("A2:D101");
    range.clear();
 
    
    // set timestamp of query run
    setTimeStamp(sheetName)
    var data = report.rows;

    
    // get the range to write and write the results
    try {
    var writeRange = sheet.getRange(2, 1, data.length, data[0].length) // Read reference for getRange arguments
    writeRange.setValues(data);
    }
    catch(err) {
    Logger.log(err);
    } 

}

// test ga query to return json to log
function test(){

  var x = Analytics.Data.Realtime.get('ga:214164114', 'rt:pageviews')
  Logger.log(x)
  }
 

Я добавил дополнительную переменную metrics и попробовал несколько способов, пытаясь перенести их в таблицу, но я что-то упускаю.

Любые мысли приветствуются.

Комментарии:

1. Вы имеете в виду, что вы пытались объединить эти показатели в своем коде rt:pageviews и rt:country в одном запросе? После проверки ссылки на географические измерения и метрики , rt:country является ли измерение не метрикой?

2. Я только сейчас понял, о чем я прошу, прочитав еще немного. Я хотел бы иметь возможность использовать rt: pageviews и rt: activeUsers для метрик и rt:: country и rt: pageviews для измерений в одном запросе. Я могу, или, конечно, создать несколько таблиц Google, но это кажется немного болезненным для каждого нового измерения и показателя, которые меня могут попросить добавить.