I want to get regular updates on my website's speed through Slack. How to achieve this using Google Apps Script?
Asked
Active
Viewed 620 times
1 Answers
4
First and foremost, get...
- Your
PageSpeedInsights API
key, (here is how) - A Slack webhook url, (here is how)
Once you have these, go to https://script.google.com/home and create a new script.
The following code should do the trick:
var mobileData = fetchDataFromPSI('mobile');
var desktopData = fetchDataFromPSI('desktop');
function pageSpeedApiEndpointUrl(strategy) {
const apiBaseUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed';
const websiteHomepageUrl = ''; // Your website
const apikey = ''; // Your API key
const apiEndpointUrl = apiBaseUrl + '?url=' + websiteHomepageUrl + '&key=' + apikey + '&strategy=' + strategy;
return apiEndpointUrl;
}
function fetchDataFromPSI(strategy) {
const pageSpeedEndpointUrl = pageSpeedApiEndpointUrl(strategy);
const response = UrlFetchApp.fetch(pageSpeedEndpointUrl);
const json = response.getContentText();
const parsedJson = JSON.parse(json);
const lighthouse = parsedJson['lighthouseResult']
const originLoadingExperience = parsedJson['originLoadingExperience']
const result = {
'overall_performance': originLoadingExperience['overall_category'],
'score': lighthouse['categories']['performance']['score']*100,
'firstContentfulPaint': lighthouse['audits']['first-contentful-paint']['displayValue'],
'speedIndex': lighthouse['audits']['speed-index']['displayValue'],
'timeToInteractive': lighthouse['audits']['interactive']['displayValue'],
'firstMeaningfulPaint': lighthouse['audits']['first-meaningful-paint']['displayValue'],
}
return result;
}
function composeMessageForSlack() {
const message = {
'blocks': [
{
'type': 'section',
'text': {
'type': 'mrkdwn',
'text': '*Website performance on Prod:*'
}
}
],
'attachments': [
{
'blocks': [
{
'type': 'section',
'text': {
'type': 'mrkdwn',
'text': 'Performance on Mobile :point_down:'
}
},
{
'type': 'section',
'text': {
'type': 'mrkdwn',
'text': 'Score = ' + mobileData['score'] +
'\n\nFirst Contentful Paint = ' + mobileData['firstContentfulPaint'] +
'\n\nSpeed Index = ' + mobileData['speedIndex'] +
'\n\nTime To Interactive = ' + mobileData['timeToInteractive'] +
'\n\nFirst Meaningful Paint = ' + mobileData['firstMeaningfulPaint'] +
'\n\nOverall Performance is = ' + mobileData['overall_performance'] + '\n\n'
}
},
{
'type': 'divider'
},
{
'type': 'section',
'text': {
'type': 'mrkdwn',
'text': 'Performance on Desktop :point_down:'
}
},
{
'type': 'section',
'text': {
'type': 'mrkdwn',
'text': 'Score = ' + desktopData['score'] +
'\n\nFirst Contentful Paint = ' + desktopData['firstContentfulPaint'] +
'\n\nSpeed Index = ' + desktopData['speedIndex'] +
'\n\nTime To Interactive = ' + desktopData['timeToInteractive'] +
'\n\nFirst Meaningful Paint = ' + desktopData['firstMeaningfulPaint'] +
'\n\nOverall Performance is = ' + desktopData['overall_performance'] + '\n\n'
}
}
]
}
]
};
return message;
}
function postDataToSlack() {
const slackWebhookUrl = ''; //Your Slack webhook url
const payload = composeMessageForSlack();
const options = {
'method' : 'post',
'contentType' : 'application/json',
'payload' : JSON.stringify(payload)
};
return UrlFetchApp.fetch(slackWebhookUrl, options);
}
function doGet() {
postDataToSlack()
return ContentService.createTextOutput('Website Performance retrieval successfull!');
}
Once you test the code and make sure it works, determine the frequency of your report using triggers.

mert dökümcü
- 761
- 3
- 9
- 31