Last active
March 21, 2018 12:15
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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