Если вы работаете над крупным проектом с кучей представлений в аналитиксе да еще и параллельно с другим агентством и даже не одним, то наверняка знаете, как полезно логировать изменения в целях, чтобы их легко было восстановить в случае чего.
Я как любой нормальный человек, глядя на проект, где настроено свыше полторы тысячи целей, совсем не горю желанием заносить их в какой-то документ руками, поэтому написал небольшой скрипт, который возможно пригодится и вам.
Содержание
Таблица выгрузки
В результате работы скрипта получится табличка со следующими полями:
- Номер цели в представлении
- Имя цели
- Аккаунт
- Ресурс
- Представление
- Активность цели
- Тип показывает, установлена ли цель на достижение страницы, событие еще что-то
- Условия - для страниц это тип соответствия и url, для событий название элемента события, тип соответствия и проверяемое значение
Скрипт выгрузки
Привычным движением лезем в Spreadsheets - Инструменты - Редактор скриптов и копипастим нижеследующее безобразие:
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()
и жмем треугольник.
Скрипт написан на скорую руку и выгружает цели со всех аккаунтов, к которым есть доступ. Если нужно только с какого-то определенного, то я обозначил кусок кода с перебором, не стесняйтесь там вмешаться и уточнить, откуда грузить.