-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCrUXApiGoogleAppsScript.js
129 lines (106 loc) · 3.93 KB
/
CrUXApiGoogleAppsScript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
This collects data from Chrome UX Report API and pushes it to Google Sheets.
How to:
- Create a Google Spreadsheet with two Sheets "Data" and "Origins"
- Open Google Apps Script and copy paste the code.
- Set var "googleSheetsId" to access the sheet from the script
- Get an API Key for Chrome UX Report API + set var "apiKey" https://developers.google.com/web/tools/chrome-user-experience-report/api/guides/getting-started
- Add the domains you want to monitor in sheet "Origins" in A:A as full URLs
- Test running "start" function... There should be data in the Sheet "Data"
- Schedule the "start" function of the script to run e.g. 6 in the morning. Check https://developers.google.com/web/tools/chrome-user-experience-report/api/reference#daily-updates
- Create a Dashboard / Datastudio with the collected data
*/
var googleSheetsId = ""
var apiKey = ""
//Query API
function getOrigin(origin) {
var url = "https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=" + apiKey
var headers = {
contentType: 'application/json',
method: 'post',
payload: JSON.stringify({ origin: origin })
}
var response = UrlFetchApp.fetch(url, headers);
toOutputArray(response)
//Logger.log(response.getContentText());
}
//Generate the output array
function toOutputArray(response) {
var responseJson = JSON.parse(response);
//LCP
//LCP Good
var lcpgood = responseJson.record.metrics.largest_contentful_paint.histogram.filter(function (row) {
return row.start === 0;
});
lcpgood = lcpgood[0].density
//LCP Needs improvements
var lcpni = responseJson.record.metrics.largest_contentful_paint.histogram.filter(function (row) {
return row.start === 2500;
});
lcpni = lcpni[0].density
//LCP Poor
var lcppoor = responseJson.record.metrics.largest_contentful_paint.histogram.filter(function (row) {
return row.start === 4000;
});
lcppoor = lcppoor[0].density
//CLS
//CLS Good
var clsgood = responseJson.record.metrics.cumulative_layout_shift.histogram.filter(function (row) {
return row.start === "0.00";
});
clsgood = clsgood[0].density
//CLS Needs improvements
var clsni = responseJson.record.metrics.cumulative_layout_shift.histogram.filter(function (row) {
return row.start === "0.10";
});
clsni = clsni[0].density
//CLS Poor
var clspoor = responseJson.record.metrics.cumulative_layout_shift.histogram.filter(function (row) {
return row.start === "0.25";
});
clspoor = clspoor[0].density
//FID
//FID Good
var fidgood = responseJson.record.metrics.first_input_delay.histogram.filter(function (row) {
return row.start === 0;
});
fidgood = fidgood[0].density
//FID Needs improvements
var fidni = responseJson.record.metrics.first_input_delay.histogram.filter(function (row) {
return row.start === 100;
});
fidni = fidni[0].density
//FID Poor
var fidpoor = responseJson.record.metrics.first_input_delay.histogram.filter(function (row) {
return row.start === 300;
});
fidpoor = fidpoor[0].density
var date = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd")
var outputArray = [date, responseJson.record.key.origin, lcpgood, lcpni, lcppoor, clsgood, clsni, clspoor, fidgood, fidni, fidpoor]
//Logger.log(outputArray)
appendOutputRow(outputArray)
}
//Append data to data sheet
function appendOutputRow(outputArray) {
var ss = SpreadsheetApp.openById(googleSheetsId);
var sheet = ss.getSheetByName("Data");
sheet.appendRow(outputArray);
}
//Get column 1 of origins sheet
function getOriginsToStart() {
var ss = SpreadsheetApp.openById(googleSheetsId);
var sheet = ss.getSheetByName("Origins");
var values = sheet.getSheetValues(1, 1, 100, 1);
return values
}
//Start with geting sheets
function start() {
var origins = getOriginsToStart()
//Loop all competitors
for(i=0;i<origins.length;++i){
if (origins[i][0] != "") {
Logger.log(origins[i][0])
getOrigin(origins[i][0])
}
}
}