Google Apps 스크립트를 사용하여 Google 애널리틱스에서 데이터를 가져와 Google 시트의 보고서에 넣습니다. 이 특정 보고서의 경우 가져온 데이터가 매우 커서 Google 시트에 넣기 전에 수정하고 싶습니다. javascript / google apps script를 사용하여 어떻게 할 수 있는지 알아 내려면 귀하의 도움이 필요합니다.
이것은 내 현재 코드입니다.
function testReport() {
var profileId = XXXXXXX;
var tableId = 'ga:' + profileId;
var startDate = 'yesterday';
var endDate = 'yesterday';
var metrics = 'ga:sessions';
var optionalArgs = {
'dimensions': 'ga:landingPagePath, ga:date',
'filters': 'ga:sessions>0',
};
var report = Analytics.Data.Ga.get(tableId, startDate, endDate, metrics, optionalArgs);
if (report.rows) {
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data');
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, report.rows.length, report.rows[0].length).setValues(report.rows);
}
}
report.rows
다음 형식의 객체입니다.
[[/,20191228,100],[/locationOne,20191228,10],[/locationTwo,20191228,1],[/locationOne?s=a,20191228,10]]
다음과 같은 Google 시트가 생성됩니다.
Landing Page Date Sessions
/ 20191228 100
/locationOne 20191228 10
/locationTwo 20191228 1
/locationOne?s=a 20191228 10
그러나 내 웹 사이트에는 많은 랜딩 페이지가 있으므로 Google 시트에 붙여 넣기 전에이 데이터를 압축해야합니다. 이상적으로는 두 가지를 수행하고 싶습니다.
이를 바탕으로 다음과 같은 새 테이블을 가져와야합니다.
Web Section Date Sessions
Location One 20191228 20
Location Two 20191228 1
Others 20191228 100
저를 도와 주셔서 감사합니다!
다음 상황을 달성하고자합니다.
에서
[["/",20191228,100],["/locationOne",20191228,10],["/locationTwo",20191228,1],["/locationOne?s=a",20191228,10],["/locationOne",20191229,10]]
에
Web Section Date Sessions
Location One 20191228 20
Location One 20191229 10
Location Two 20191228 1
Others 20191228 100
으로 수정 location
하려고 Location
합니다.
내 이해가 맞다면이 답변은 어떻습니까? 이것은 몇 가지 가능한 답변 중 하나에 불과하다고 생각하십시오.
이 수정 된 스크립트의 흐름은 다음과 같습니다.
report
와 같이 값을 검색합니다 Analytics.Data.Ga.get()
.스크립트를 수정하면 다음과 같이됩니다.
에서:var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data');
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, report.rows.length, report.rows[0].length).setValues(report.rows);
에:
// Please set the key words for using as "Web Section".
var searchValues = ["One", "Two"];
// Create object.
var object = report.rows.reduce(function(o, e) {
var idx = -1;
var check = searchValues.some(function(f, j) {
if (e[0].indexOf(f) != -1) {
idx = j;
return true;
}
return false;
});
if (check) {
var s = searchValues[idx];
var key = e[0].replace(/\//g, "").split(s).shift().replace(/^[a-z]/g, function(f) {return f.toUpperCase()}) + " " + s + "_" + e[1];
o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
} else {
var others = "Others_" + e[1];
o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
}
return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
// Put array to Spreadsheet.
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data');
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, array.length, array[0].length).setValues(array);
var report = {rows: [["/",20191228,100],["/locationOne",20191228,10],["/locationTwo",20191228,1],["/locationOne?s=a",20191228,10],["/locationOne",20191229,10]]};
// Please set the key words for using as "Web Section".
var searchValues = ["One", "Two"];
// Create object.
var object = report.rows.reduce(function(o, e) {
var idx = -1;
var check = searchValues.some(function(f, j) {
if (e[0].indexOf(f) != -1) {
idx = j;
return true;
}
return false;
});
if (check) {
var s = searchValues[idx];
var key = e[0].replace(/\//g, "").split(s).shift().replace(/^[a-z]/g, function(f) {return f.toUpperCase()}) + " " + s + "_" + e[1];
o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
} else {
var others = "Others_" + e[1];
o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
}
return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
console.log(array);
var searchValues = ["One", "Two"];
. locationOne
, 의 패턴을 잘 모르기 때문입니다 locationTwo
. 따라서이 수정 된 스크립트에서 처음에는 이것을 설정하십시오.20191228
및 100
of ["/",20191228,100]
가 숫자인지 문자열 인지 확실하지 않습니다 . 그래서 Number(e[2])
수정 된 스크립트에서 사용 했습니다.array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
.내가 당신의 질문을 오해하고 이것이 당신이 원하는 방향이 아니라면 사과드립니다. 그 때 더 많은 샘플 값과 예상 한 결과를 제공 할 수 있습니까? 이것으로 확인하고 싶습니다.
One
, Two
검색 값으로.First Output
, Second Output
스프레드 시트를 넣어 사용되는 이름으로.추가 질문에 대해서는 위와 같이 이해할 수 있습니다. 내 이해가 정확하다면 다음 샘플 스크립트는 어떻습니까?
// Please set the key words and names for using as "Web Section".
var searchValues = {
search: ["One", "Two"],
name: ["First Output", "Second Output"]
};
// Create object.
var object = report.rows.reduce(function(o, e) {
var idx = -1;
var check = searchValues.search.some(function(f, j) {
if (e[0].indexOf(f) != -1) {
idx = j;
return true;
}
return false;
});
if (check) {
var key = searchValues.name[idx] + "_" + e[1];
o[key] = key in o ? o[key] + Number(e[2]) : Number(e[2]);
} else {
var others = "Others_" + e[1];
o[others] = others in o ? o[others] + Number(e[2]) : Number(e[2]);
}
return o;
}, {});
// Create array.
var array = Object.keys(object).map(function(e) {return e.split("_").concat(object[e])});
array.sort(function(a, b) {return (a[0] < b[0] ? -1 : 1)});
// Put array to Spreadsheet.
var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/FILLER_TEXT/edit#gid=0');
var sheet = spreadsheet.getSheetByName('Data');
var firstEmptyRow = sheet.getLastRow() + 1;
sheet.getRange(firstEmptyRow,1, array.length, array[0].length).setValues(array);
search
과의 인덱스 name
에를 searchValues
.One
및 Two
의 이름을 사용 First Output
하고 Second Output
각각.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다