Skip to content

Instantly share code, notes, and snippets.

@norisk-marketing
Last active March 21, 2018 12:15
Show Gist options
  • Save norisk-marketing/06666417d2525d1e69b25ab965f42e38 to your computer and use it in GitHub Desktop.
Save norisk-marketing/06666417d2525d1e69b25ab965f42e38 to your computer and use it in GitHub Desktop.
This hourly revenue checker will check your main URL every hour to check for the existence of a gtm.js File and an initialized dataLayer array.
function domainCheckerAndGtmjsPrinter() {
// ********** START OF CONFIGURATION ***************
var homeUrls = [
"https://www.shop1.de",
"https://www.shop2.com",
"https://www.site3.de",
];
var RECIPIENT = ['name@email.de','name2@email.com'];
var MISSING_DATALAYER_EXCEPTION = "https://www.site3.de";
// COPY THIS DEMOSHEET AND ENTER THE ID (between the '/' and '/') BELOW: https://docs.google.com/spreadsheets/d/1koIEPR_hhgXZSdcZ81GJ4AHxTMw4zgyjSzDb_ZpcG7Y/edit#gid=0
var spreadsheetId = "1HClQF9olsdfdfdfdfdfdkbgjRiDsduG-lzfsg";
// ********** END OF CONFIGURATION ***************
var gtmString = 'gtm.js';
var dataLayerString = 'dataLayer = [{';
var SCRIPT_NAME = 'MissingGtmAlert';
var allUrlInfo = [];
for(i=0;i<homeUrls.length;i++) {
var fetchedUrl = UrlFetchApp.fetch(homeUrls[i]);
// Extract string string from full HTML content
var urlContentAsString = fetchedUrl.toString();
var gtmStart = parseInt(urlContentAsString.indexOf(gtmString)) > 0 ? "y" : "n" ;
var dataLayerStart = parseInt(urlContentAsString.indexOf(dataLayerString)) > 0 ? "y" : "n" ;
// Custom rule BayWa
if(homeUrls[i] === MISSING_DATALAYER_EXCEPTION) dataLayerStart = "-";
// Combine URL, Status and h1 into one large array allProductUrlInfo
var singleUrlInfo = [];
singleUrlInfo.push(homeUrls[i].replace(/http:\/\/www.|https:\/\/www./,""), fetchedUrl.getResponseCode(), gtmStart, dataLayerStart);
allUrlInfo.push(singleUrlInfo);
}
//Prints the allProductUrlInfo to a spreadsheet
var ss = SpreadsheetApp.openById(spreadsheetId);
var sheet = ss.getActiveSheet();
sheet.getRange('a:d').clearContent();
// Sets header values
var sheetHeader = ss.getSheets()[0];
var spreadsheetHeader = [['URL', 'Status', gtmString, dataLayerString.replace(" = [{","")]];
sheet.getRange('a1:d1').setValues(spreadsheetHeader);
var destinationRange = sheet.getRange(2, 1, allUrlInfo.length, allUrlInfo[0].length);
destinationRange.setValues(allUrlInfo);
var lastReportRow = getLastReportRow(sheet);
var rowLength = lastReportRow -1;
var failedRows = [];
for(i=0; i<allUrlInfo.length; i++) {
if(allUrlInfo[i][2] == "n" || allUrlInfo[i][3] == "n") {
failedRows.push(allUrlInfo[i]);
}
}
Logger.log("failedRows: " + failedRows);
if(failedRows.length > 0) {
sendArrayAsEmail(SCRIPT_NAME,spreadsheetHeader,failedRows, RECIPIENT);
} else Logger.log("Success: Gtm.js and datalayer found for all urls. All Good!");
}
function sendArrayAsEmail(SCRIPT_NAME, spreadsheetHeader, printArray, RECIPIENT) {
var subject = 'WARNING: ' + SCRIPT_NAME+' | gtm.js or dataLayer NOT FOUND for min. one account !';
var body = subject;
var htmlBody = '<html><body>'+subject;
var htmlBody = '<table border="1" width="95%" style="border-collapse:collapse;">';
htmlBody += "<tr>";
for(var i=0; i<spreadsheetHeader[0].length; i++){
htmlBody += '<td align="center">'+spreadsheetHeader[0][i]+'</td>';
}
htmlBody += "<tr>";
for(var i=0; i<printArray.length; i++) {
htmlBody += "<tr>";
for(var j=0; j<printArray[i].length; j++){
htmlBody += "<td>"+printArray[i][j]+"</td>";
}
htmlBody += "</tr>";
}
htmlBody += '<br/ ><br/ >';
htmlBody += "</table></html></body>";
var options = { htmlBody : htmlBody };
for(var i in RECIPIENT) {
MailApp.sendEmail(RECIPIENT[i], subject, body, options);
Logger.log('Email sent to ' + RECIPIENT[i]);
}
}
/*
* @param spreadsheet {object}
* @return {integer}
*/
function getLastReportRow(spreadsheet) {
var column = spreadsheet.getRange('A:A');
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct] && values[ct][0] != "" ) {
ct++;
}
return (ct+1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment