Сравнение более 100 веб-сайтов с помощью Google Analytics
Вы титан индустрии с веб-сайтами на высоте. Вы хотите зарегистрироваться. Как дела у каждого? Как они соотносятся со своими сверстниками? Как вы можете улучшить отстающих и рекламировать победителей?
Google Data Studio позволяет смешивать максимум 5 источников. Какой облом. К счастью, с помощью некоторых вызовов API и простых сценариев вы можете автоматизировать процесс извлечения основных данных из любого количества учетных записей GA, которыми вы владеете и управляете.
Вот что вам понадобится:
- Более 5 аккаунтов Google Analytics.
- Google Таблицы
- Некоторое знание Javascript (обратите внимание, что вам не нужно быть экспертом — это потому, что у Google уже есть ресурсы для вызовов Google Analytics Core Reporting API — мы просто изменим их для наших целей.)
- Элегантный рабочий плейлист, под который можно потанцевать, пока вы небрежно автоматизируете часть обработки данных.
Шаг 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()» каждый месяц, неделю или даже день.
Перейдите в «Редактировать» › «Триггеры текущего проекта» и на открывшейся странице пройдите в правый нижний угол и нажмите «+ Добавить триггер».
В открывшемся окне измените «источник события» на «Управляемый временем», и вы можете настроить запуск триггера ежемесячно, еженедельно или даже ежедневно. Прокрутите вниз и нажмите «Сохранить».
Поздравляем, Титан Промышленности! Теперь у вас есть строительные блоки для надежного анализа данных, настройки сложных информационных панелей и автоматической загрузки самых последних данных по мере масштабирования.
Хотите узнать больше? Ознакомьтесь с некоторыми ресурсами ниже: