Easy creation of banners in bulk, for all of your locations
→ No more copy-pasting, color-picking, or resizing
Sheets Link: https://docs.google.com/spreadsheets/d/1ELaKIgXc66NMKe1tfuR39-oMo8dKzqYaAOv_uiZvEeA/edit?gid=0#gid=0
Apps Script:
function myFunction() {
fetchCSS();
}
function fetchCSS() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var urls = sheet.getRange('A:A').getValues().flat().filter(String);
if (!urls.length) {
console.log('Missing URLs');
return;
}
urls.forEach((url, index) => {
try {
var response = UrlFetchApp.fetch(url);
var html = response.getContentText();
var cssLinks = html.match(/]+?rel=["']stylesheet["'][^>]*?>/gi);
var logoUrl = extractLogoUrl(html) || extractLogoFromHeader(html) || extractSvgLogo(html) || extractFavicon(html);
console.log("CSS Links Found: " + (cssLinks ? cssLinks.length : "None") + " for: " + url);
var colorCount = {};
cssLinks && cssLinks.forEach(function (link) {
var hrefMatch = link.match(/href=["']([^"']+)["']/);
if (!hrefMatch) {
return;
}
var cssUrl = decodeHtmlEntities(hrefMatch[1]);
handleCssUrl(cssUrl, url, colorCount, logoUrl);
});
outputColorsToSheet(sheet, colorCount, url, index + 1, logoUrl);
} catch (e) {
console.log('Error: ' + e.toString());
}
});
}
function handleCssUrl(cssUrl, baseUrl, colorCount, logoUrl) {
if (!cssUrl.startsWith('http')) {
if (cssUrl.startsWith('//')) {
cssUrl = 'https:' + cssUrl;
} else {
try {
cssUrl = new URL(cssUrl, baseUrl).href;
} catch (e) {
cssUrl = null;
}
}
}
if (!cssUrl) {
return;
}
try {
var cssResponse = UrlFetchApp.fetch(cssUrl);
var cssText = cssResponse.getContentText();
extractColors(cssText, colorCount);
// Check for background-image logos if no other logo was found
if (!logoUrl) {
logoUrl = fetchBackgroundLogo(cssText, baseUrl);
}
} catch (e) {
console.log('Error fetching CSS from URL: ' + cssUrl + " | Error: " + e.toString());
}
}
function extractLogoUrl(html) {
var patterns = [
/
]+src=["']([^"']+)["'][^>]*(id=["'][^"']*logo[^"']*["']|class=["'][^"']*logo[^"']*["'])/i,
/
]+class=["'][^"']*logo[^"']*["'][^>]*src=["']([^"']+)["']/i,
/
]+id=["'][^"']*logo[^"']*["'][^>]*src=["']([^"']+)["']/i
];
for (let pattern of patterns) {
let match = html.match(pattern);
if (match) {
return decodeHtmlEntities(match[1]);
}
}
return null;
}
function fetchBackgroundLogo(cssText, baseUrl) {
var urlMatch = cssText.match(/\.logo[^{]*{[^}]*background-image:\s*url\(["']?([^"'\)]+)["']?\);/i);
if (urlMatch) {
let imageUrl = urlMatch[1];
if (!imageUrl.startsWith('http')) {
imageUrl = new URL(imageUrl, baseUrl).toString();
}
return imageUrl;
}
return null;
}
function extractSvgLogo(html) {
var svgMatch = html.match(/
Join over 1.000+ savvy marketeers who benefit from this FREE inspirational newsletter!