Выгрузка целей из аккаунта Google Analytics

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

Таблица выгрузки

В результате работы скрипта получится табличка со следующими полями:

  • Номер цели в представлении
  • Имя цели
  • Аккаунт
  • Ресурс
  • Представление
  • Активность цели
  • Тип показывает, установлена ли цель на достижение страницы, событие еще что-то
  • Условия - для страниц это тип соответствия и url, для событий название элемента события, тип соответствия и проверяемое значение
Выгрузка целей из Google Analytics

Скрипт выгрузки

Привычным движением лезем в Spreadsheets - Инструменты - Редактор скриптов и копипастим нижеследующее безобразие:

 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
function goals() {
 
  var p = [];
  var v = [];
  var g = [];
  
  var a = Analytics.Management.Accounts.list();
  
  var ss = SpreadsheetApp.getActiveSheet();
  ss.clear();
  var pr = [['Номер', 'Имя', 'Аккаунт', 'Ресурс', 'Представление', 'Активность', 'Тип', 'Условие 1', '', '', 'Условие 2', '', '', 'Условие 3', '', '']]
  ss.getRange(ss.getLastRow() + 1, 1, pr.length, 16).setValues(pr);   
 
  // здесь идет перебор аккаунтов и можно ограничить по частям
  for(var i = 0; i < a.items.length; i++) {
    p[i] = Analytics.Management.Webproperties.list(a.items[i].id); 
  }
  
  for(var i = 0; i < p.length; i++) {
    v[i] = [];
    for(var j = 0; j < p[i].items.length; j++) {
      v[i][j] = Analytics.Management.Profiles.list(p[i].items[j].accountId, p[i].items[j].id);
      for(var k = 0; k < v[i][j].items.length; k++) {
        var t = Analytics.Management.Goals.list(v[i][j].items[k].accountId, v[i][j].items[k].webPropertyId, v[i][j].items[k].id) 
        g.push(t);
        writeGoals(t);
      }
    }
  }
  
}
function writeGoals(g) {

  var l = g.items.length;
  var pr = [];
  var ss = SpreadsheetApp.getActiveSheet();
  
  for(var i = 0; i < g.items.length; i++) {
    var t = g.items[i]
    switch(t.type) {
      case 'URL_DESTINATION':
        pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, t.urlDestinationDetails.matchType, t.urlDestinationDetails.url, '', '', '', '', '', '', '']);
        break;
      case 'VISIT_TIME_ON_SITE':
        pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, t.visitTimeOnSiteDetails.comparisonType , t.visitTimeOnSiteDetails.comparisonValue, '', '', '', '', '', '', '' ]);
        break;
      case 'EVENT':
        var ec = t.eventDetails.eventConditions;
        if(ec.length == 3) {
          pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, ec[0].type, ec[0].matchType, ec[0].expression, ec[1].type, ec[1].matchType, ec[1].expression, ec[2].type, ec[2].matchType, ec[2].expression]);
        } else if(ec.length == 2) {
          pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, ec[0].type, ec[0].matchType, ec[0].expression, ec[1].type, ec[1].matchType, ec[1].expression, '', '', '']);
        } else {
          pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, ec[0].type, ec[0].matchType, ec[0].expression, '', '', '', '', '', '']);
        }
        break;
      default:
        pr.push([t.id, t.name, t.accountId, t.webPropertyId, t.profileId, t.active, t.type, '' , '', '', '', '', '', '', '', '']);
        break;
    }
  }
  if(pr.length) ss.getRange(ss.getLastRow() + 1, 1, pr.length, 16).setValues(pr);
}

Для корректной работы необходимо включить Analytics API в Ресурсы - Дополнительные функции Google…. Там же читателю предложат активировать его в консоли и дадут ссылку, это тоже надо будет сделать.

После всех приготовлений выбираем функцию goals() и жмем треугольник.

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

comments powered by Disqus