Сравнение более 100 веб-сайтов с помощью Google Analytics

Вы титан индустрии с веб-сайтами на высоте. Вы хотите зарегистрироваться. Как дела у каждого? Как они соотносятся со своими сверстниками? Как вы можете улучшить отстающих и рекламировать победителей?

Google Data Studio позволяет смешивать максимум 5 источников. Какой облом. К счастью, с помощью некоторых вызовов API и простых сценариев вы можете автоматизировать процесс извлечения основных данных из любого количества учетных записей GA, которыми вы владеете и управляете.

Вот что вам понадобится:

  1. Более 5 аккаунтов Google Analytics.
  2. Google Таблицы
  3. Некоторое знание Javascript (обратите внимание, что вам не нужно быть экспертом — это потому, что у Google уже есть ресурсы для вызовов Google Analytics Core Reporting API — мы просто изменим их для наших целей.)
  4. Элегантный рабочий плейлист, под который можно потанцевать, пока вы небрежно автоматизируете часть обработки данных.

Шаг 1. Настройка интерфейса сценариев

Откройте Google Sheets, назовите лист как-нибудь сексуальным и перейдите в редактор скриптов — именно здесь мы будем жить большую часть времени.

Перейдите в «Ресурсы» и нажмите «Дополнительные службы Google». Назовите свой сценарий и, если будет предложено принять какие-либо разрешения облачной платформы от Google, перейдите по ссылке и примите их. Вернитесь в редактор сценариев и еще раз нажмите «Ресурсы» > «Дополнительные службы Google».

Во всплывающем окне прокрутите вниз и включите Google Analytics API:

Нажмите «ОК». После того, как мы запустим скрипт в первый раз, вам нужно будет еще раз пройти аутентификацию с учетными данными вашей учетной записи Google.

Шаг 2.Повторный просмотр всех профилей, содержащихся во многих ваших учетных записях.

У вас есть много веб-сайтов, подключенных через вашу учетную запись Google. Каждый из этих сайтов имеет идентификатор веб-ресурса, вложенный в идентификатор учетной записи для соответствующей учетной записи Google Analytics. У каждого веб-ресурса есть представление, по умолчанию это «Все данные о посетителях веб-сайта» — это то, что мы будем использовать.

Как вы можете заметить, иерархия Account > WebProperty > View становится немного запутанной и запутанной. К счастью, мы можем использовать цикл for, чтобы изолировать данные каждого сайта и распечатать их на нашем листе Google по одному.

Очистите редактор скриптов и вставьте следующее:

function dataPull() {
  try {
    //get number of accounts
    var accounts = Analytics.Management.Accounts.list();
  if (accounts.getItems()) {
    var numberOfAccounts=accounts.getItems().length;
  }
    //clear spreadsheet
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clear();
 
  }catch(error) {
    Browser.msgBox(error.message);
  }
}

ВНИМАНИЕ: оператор «try-catch» не закрыт. Она останется открытой до конца функции.

Здесь мы очищаем текущую электронную таблицу, вызываем Google Analytics Core Reporting API и получаем общее количество аналитических учетных записей, которые нам нужно будет просмотреть. Точно так же мы можем сделать то же самое для количества веб-ресурсов, содержащихся в каждой учетной записи.

Вставьте следующее прямо под «sheet.clear();»

//start row for importing data (row 1 contains our headers)
    var numRows=2;
for(var i=0; i<numberOfAccounts;i++){
      
    var AccountId = accounts.getItems()[i].getId();
var webProperties = Analytics.Management.Webproperties.list(AccountId);
      
    if (webProperties.getItems()) {
      var numberOfProperties = webProperties.getItems().length;
      }

ВНИМАНИЕ: петля for НЕ закрывается закрывающейся скобкой. Пока оставьте это открытым, мы собираемся вложить туда еще один цикл for.

Как и раньше, мы циклически просматриваем общее количество имеющихся у нас учетных записей, останавливаясь на каждой из них и получая количество веб-ресурсов, содержащихся в этой конкретной учетной записи. Поскольку каждый веб-ресурс соответствует сайту и содержит данные для этого сайта, мы затем извлечем данные из него и вставим в нашу электронную таблицу с помощью нескольких функций.

Вот где эта переменная «numRows» пригодится. Указав, где мы хотим разместить данные, и увеличив эту переменную, мы можем вести точный подсчет количества строк данных в нашей электронной таблице и гарантировать, что мы печатаем данные только в новую и пустую строку.

Вставьте следующее под предыдущим оператором «if»:

for(var n=0; n<numberOfProperties; n++){
        
    var propertyName= webProperties.getItems()[n].getName()
    
    var targetProfile = getTargetProfile(i,n);
    var results = getReportDataForProfile(targetProfile);
    
      try{
      if(results.getRows()){
        
    outputToSpreadsheet(sheet,results,numRows,propertyName);
        
      numRows+=results.getRows().length;
        
      }else{
        throw new Error('No views (profiles) found');
  }
      } catch(error){
        sheet.appendRow([propertyName])
        numRows+=1;
    }
      }
}
  }catch(error) {
    Browser.msgBox(error.message);
  }
}

ВНИМАНИЕ: теперь и циклы for, и всеобъемлющий оператор try-catch должны быть ЗАКРЫТЫ.

С помощью нашей переменной «numberOfProperties» мы можем перебирать каждое веб-свойство, передавать ключевые данные из этого свойства и распечатывать их в электронной таблице с помощью нашей функции «ouputToSpreadsheet()».

В случае, если свойство не существует, мы получим ошибку. В случае, если у свойства нет данных, мы просто добавим строку с именем свойства и перейдем к следующему свойству, увеличив наше значение «numRows» на 1.

При этом мы все настроены на циклический просмотр всех наших профилей, поскольку мы передали «i» и «n» нашей функции «getTargetProfile()», которая будет точно определять каждый сайт на основе его точного идентификатора учетной записи и Идентификатор веб-ресурса.

Шаг 3.Передача данных и вывод их в электронную таблицу

Нам нужно настроить различные функции, которые мы вызывали в «dataPull()». К ним относятся функция «getTargetProfile()», которая возвращает переменную, содержащую все записанные данные веб-сайта для профиля, функция «getReportDataForProfile()», которая указывает, какие данные мы хотим изолировать за какой период времени, и функция «outputToSpreadsheet», которая фактически правильно печатает данные, которые мы изолировали, в нашу электронную таблицу.

Следующее в значительной степени опирается на существующее руководство по внедрению, используемое для автоматизации доступа к данным Google Analytics в Google Sheets.

Начнем с «getTargetProfile()»:

function getTargetProfile(i,n) {
  var accounts = Analytics.Management.Accounts.list();
  if (accounts.getItems()) {
    var targetAccountId = accounts.getItems()[i].getId();
var webProperties = Analytics.Management.Webproperties.list(targetAccountId);
    if (webProperties.getItems()) {
var targetWebPropertyId = webProperties.getItems()[n].getId();
      var profiles = Analytics.Management.Profiles.list(targetAccountId, targetWebPropertyId);
if (profiles.getItems()) {
        var targetProfile = profiles.getItems()[0];
        return targetProfile;
} else {
        throw new Error('No views (profiles) found.');
      }
      
    }else {
      throw new Error('No webproperties found.');
    }
    
  } else {
    throw new Error('No accounts found.');
  }
}

Поскольку нас интересует только первое «представление» веб-ресурса или представление «Все данные веб-сайта», нам нужно получить только представление профиля с индексом «0», следовательно,

var targetProfile = profiles.getItems()[0];

присваивание вместо другого цикла.

Затем мы можем создать «getReportDataForProfile()», передав наш «targetProfile», возвращенный из предыдущей функции:

function getReportDataForProfile(targetProfile) {
var profileId = targetProfile.getId();
  var tableId = 'ga:' + profileId;
  var startDate = getLastNdays(30);   // 30 days ago.
  var endDate = getLastNdays(0);      // Today.
var optArgs = {
        
    'sort': 'ga:pageviews',       // Sort by pageviews
    '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,ga:avgSessionDuration,ga:organicSearches,ga:users,ga:newUsers,ga:bounceRate', 
      optArgs);
if (results.getRows()) {
    return results;
  } else {
    return null;
}
}

Затем следует «getLastNdays()», чтобы установить диапазон дат для данных, которые мы хотели бы получить:

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

Как вы заметили выше, запрос API извлекает много информации, включая «ga: OrganicSearchs, ga;newUsers» и т. д.

Если вам нужен подробный список всех метрик и параметров и способов их включения, перейдите ЗДЕСЬ.

Наконец, давайте включим нашу функцию «outputToSpreadsheet()»:

function outputToSpreadsheet(sheet,results,numRows,propertyName) {
// Print the headers.
  var headerNames = [];
  for (var i = 0, header; header = results.getColumnHeaders()[i]; ++i) {
    headerNames.push(header.getName());
  }
  sheet.getRange(1, 2, 1, headerNames.length)
      .setValues([headerNames]);
// Print the rows of data.
  sheet.getRange(numRows, 2, results.getRows().length, headerNames.length)
      .setValues(results.getRows());
  
  sheet.getRange(1,1).setValue("Site Name");
  sheet.getRange(numRows,1).setValue(propertyName);
  
  
}

Здесь мы передаем все данные, которые мы извлекли, включая нашу переменную «numRows», чтобы указать, в какую строку мы поместим наши данные, нашу переменную «propertyName», которая детализирует заголовок сайта, и сам наш лист.

При этом мы можем нажать кнопку «Выполнить» > «Выполнить функцию», ввести свои учетные данные и посмотреть, как данные автоматически заносятся в нашу электронную таблицу!

В Google Таблицах вы можете упорядочивать свои сайты по просмотрам страниц, сеансам, новым пользователям, показателям отказов и т. д., используя фильтрацию для точного сравнительного анализа и сравнения. Вы даже можете импортировать этот новый лист в Google Data Studio, если хотите добавить его на сложную панель инструментов!

Мы работали с данными, собранными за последние 30 дней, но вы можете настроить этот диапазон дат, чтобы получать данные за определенные кварталы, недели, месяцы или годы.

Шаг 4: ВРЕМЯ АВТОМАТИЗАЦИИ!

Это на самом деле самая простая часть, верьте или нет. Вместо того, чтобы открывать этот скрипт и утомительно запускать его каждый раз, когда нам нужны данные, мы можем настроить триггер для запуска этой функции «dataPull()» каждый месяц, неделю или даже день.

Перейдите в «Редактировать» › «Триггеры текущего проекта» и на открывшейся странице пройдите в правый нижний угол и нажмите «+ Добавить триггер».

В открывшемся окне измените «источник события» на «Управляемый временем», и вы можете настроить запуск триггера ежемесячно, еженедельно или даже ежедневно. Прокрутите вниз и нажмите «Сохранить».

Поздравляем, Титан Промышленности! Теперь у вас есть строительные блоки для надежного анализа данных, настройки сложных информационных панелей и автоматической загрузки самых последних данных по мере масштабирования.

Хотите узнать больше? Ознакомьтесь с некоторыми ресурсами ниже:

Автоматический доступ к данным Google Analytics в Google Таблицах

Что такое Core Reporting API — Обзор

Расширение Google Таблиц