Como mostrar a pontuação do farol no Planilhas Google com uma função personalizada

Publicados: 2020-11-19

A automação e o aprendizado de máquina têm um enorme potencial para ajudar a todos nós em marketing. Mas, no momento, muitas dessas ferramentas estão inacessíveis para pessoas que não sabem codificar ou que podem codificar um pouco, mas não estão realmente confortáveis ​​com isso.

O que geralmente acontece é que acaba havendo uma ou duas pessoas no escritório que se sentem confortáveis ​​para escrever e editar códigos e, então, essas pessoas produzem scripts e blocos de notas que todos os outros executam. O fluxo de trabalho se parece um pouco com isto:

Vou mostrar uma maneira simples de simplificar esse fluxo de trabalho para remover as etapas em que as pessoas precisam executar um script e formatar a saída. Em vez disso, eles podem executar a automação diretamente no Planilhas Google.

O exemplo que vou mostrar é para uma função personalizada do Planilhas que retorna a pontuação do Lighthouse para um URL como este gif:

O método que mostrarei não é a única maneira de fazer isso, mas ilustra uma técnica muito mais geral que pode ser usada para muitas coisas, incluindo algoritmos de aprendizado de máquina.

Existem duas partes:

  1. Um aplicativo Google Cloud Run que fará as coisas complicadas (neste caso, executar um teste Lighthouse) e que responderá às solicitações HTTP.
  2. Uma função personalizada Appscript que fará solicitações à API que você criou na etapa 1 e retornará os resultados para o Planilhas Google.

Aplicativos para execução na nuvem

Cloud Run é um serviço do Google que pega uma imagem docker fornecida por você e a disponibiliza por HTTP. Você só paga quando uma requisição HTTP é feita, então para um serviço como este que não está sendo usado 24 horas por dia, 7 dias por semana, é muito barato. O custo real dependerá de quanto você o usa, mas eu estimaria menos de US $ 1 por mês para executar milhares de testes.

A primeira coisa que precisamos fazer é criar uma imagem Docker que executará a análise do Lighthouse quando fizermos uma solicitação HTTP a ela. Felizmente para nós, há alguma documentação mostrando como executar uma auditoria do Lighthouse programaticamente no Github. O código vinculado salva a análise em um arquivo em vez de retornar a resposta por HTTP, mas isso é fácil de consertar envolvendo tudo em um aplicativo Express como este:

 const express = require('express'); const app = express(); const lighthouse = require('lighthouse'); const chromeLauncher = require('chrome-launcher'); app.get('/', async (req, res) => { // Check that the url query parameter exists if(req.query && req.query.url) { // decode the url const url = decodeURIComponent(req.query.url) const chrome = await chromeLauncher.launch({chromeFlags: ['--headless', '--no-sandbox','--disable-gpu']}); const options = {logLevel: 'info', output: 'html', port: chrome.port}; const runnerResult = await lighthouse(url, options); await chrome.kill(); res.json(runnerResult.lhr) } }); const port = process.env.PORT || 8080; app.listen(port, () => { console.log(`Listening on port ${port}`); });

Salve este código como index.js.

Em seguida, você também precisará de um arquivo chamado package.json que descreve como instalar o aplicativo acima e um Dockerfile para que possamos encerrar tudo no Docker. Todos os arquivos de código estão disponíveis no Github.

 package.json { "name": "lighthouse-sheets", "description": "Backend API for putting Lighthouse scores in Google sheets", "version": "1.0.0", "author": "Richard Fergie", "license": "MIT", "main": "index.js", "scripts": { "start": "node index.js" }, "dependencies": { "express": "^4.17.1", "lighthouse": "^6.3" }, "devDependencies": {} } Dockerfile # Use the official lightweight Node.js 10 image. # https://hub.docker.com/_/node FROM node:12-slim # Our container needs to have chrome installed to # run the lighthouse tests RUN apt-get update && apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ --no-install-recommends \ && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \ && apt-get update && apt-get install -y \ google-chrome-stable \ fontconfig \ fonts-ipafont-gothic \ fonts-wqy-zenhei \ fonts-thai-tlwg \ fonts-kacst \ fonts-symbola \ fonts-noto \ fonts-freefont-ttf \ --no-install-recommends \ && apt-get purge --auto-remove -y curl gnupg \ && rm -rf /var/lib/apt/lists/* # Create and change to the app directory. WORKDIR /usr/src/app # Copy application dependency manifests to the container image. # A wildcard is used to ensure copying both package.json AND package-lock.json (when available). # Copying this first prevents re-running npm install on every code change. COPY package*.json ./ # Install production dependencies. # If you add a package-lock.json, speed your build by switching to 'npm ci'. # RUN npm ci --only=production RUN npm install --only=production # Copy local code to the container image. COPY . ./ # Run the web service on container startup. CMD [ "node", "--unhandled-rejections=strict","index.js" ]

Crie a imagem do docker e, em seguida, você pode testar coisas localmente em seu próprio computador, como este:

Primeiro comece a imagem:

 docker run -p 8080:8080 lighthouse-sheets

E então teste para ver se funciona:

 curl -v "localhost:8080?url=https%3A%2F%2Fwww.example.com"

Ou visite localhost: 8080? Url = https% 3A% 2F% 2Fwww.example.com em seu navegador. Você deve ver muito JSON.

A próxima etapa é enviar sua imagem para o registro do Google Container. Para mim, este é um comando simples:

 docker push gcr.io/MY_PROJECT_ID/lighthouse-sheets

Mas pode ser necessário configurar a autenticação do docker antes de fazer isso. Um método alternativo é usar o Google Cloud Build para fazer a imagem; isso pode funcionar melhor para você se você não conseguir fazer a autenticação funcionar.

Em seguida, você precisa criar um serviço Cloud Run com esta imagem docker.

Abra o Cloud Run e clique em “Criar serviço”

Nomeie e ajuste as configurações. Você deve dar um nome ao seu serviço e definir algumas outras configurações:

É melhor escolher uma região próxima de onde vive a maior parte do público de seus sites. Verificar a velocidade do site de um site do Reino Unido de Tóquio não fornecerá os mesmos resultados que o seu público obtém.

Para que você chame este serviço a partir do Planilhas Google, ele deve permitir invocações não autenticadas. Se você está preocupado em bloquear e proteger o serviço para evitar que outras pessoas o usem, você terá que fazer isso (por exemplo) verificando um segredo de API na solicitação HTTP ou algo parecido.

Em seguida, você deve selecionar o contêiner feito anteriormente. Você pode digitar o nome caso se lembre ou clicar em “Selecionar” e selecioná-lo no menu.

Em seguida, clique em “Mostrar configurações avançadas” porque há outras configurações a serem feitas.

Você precisa aumentar a alocação de memória porque os testes do Lighthouse precisam de mais de 256 MB para serem executados. Eu escolhi 1GiB aqui, mas você pode precisar da permissão máxima de 2GiB para alguns sites.

Descobri que reduzir a simultaneidade para 1 melhora a confiabilidade do serviço. Isso significa que o Google iniciará automaticamente um novo contêiner para cada solicitação HTTP. A desvantagem é que isso custa um pouco mais dinheiro.

Clique em “Criar” e seu serviço Cloud Run estará pronto em breve.

Você pode fazer um teste rápido usando o URL. Por exemplo:

 curl -v "https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com"

Ou visite https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com em seu navegador.

A próxima etapa é escrever alguns Appscript para que você possa usar sua nova API de dentro do Planilhas Google.

Abra uma nova Planilha Google e abra o editor de Appscript.

Isso abrirá uma nova guia onde você pode codificar a função personalizada do Google Sheets.

A ideia principal aqui é usar a função Appscript UrlFetchApp para executar a solicitação HTTP para sua API. Alguns códigos básicos para fazer isso têm a seguinte aparência:

 function LIGHTHOUSE(url) { const BASE_URL = "https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app" var request_url = BASE_URL+"?url="+encodeURIComponent(url) var response = UrlFetchApp.fetch(request_url) var result = JSON.parse(response.getContentText()) return(result.categories.performance.score * 100) }

A última linha retorna a pontuação de desempenho geral na planilha. Você pode editá-lo para retornar algo mais. Por exemplo, para obter a pontuação de SEO, use result.categories.seo.score.

Ou você pode retornar várias colunas de resultados, retornando uma lista como esta:

[result.categories.performance.score, result.categories.seo.score]

Salve o arquivo e, em seguida, você terá uma função personalizada disponível em sua planilha do Google chamada LIGHTHOUSE.

A maneira mais fácil de começar é copiar meu exemplo de planilha do Google e, em seguida, atualizar você mesmo o código para apontar para sua própria API e retornar os resultados do Lighthouse de seu interesse.

Aprimore seu conhecimento em planilhas

A grande vantagem desse método é que ele pode funcionar para qualquer coisa que possa ser empacotada em um contêiner do Docker e retornar um resultado em 30 segundos. Infelizmente, as funções personalizadas do Planilhas Google têm um tempo limite, então você não terá tempo suficiente para treinar um algoritmo de aprendizado profundo massivo, mas ainda há muito que você pode fazer.

Eu uso um processo muito semelhante para meu complemento do Planilhas Google, Forecast Forge, mas em vez de retornar uma pontuação do Lighthouse, ele retorna uma previsão de aprendizado de máquina para quaisquer números que você colocar nela.

As possibilidades para esse tipo de coisa são realmente empolgantes porque, em Search Marketing, temos muitas pessoas que são muito boas com planilhas. Quero ver o que eles podem fazer quando podem usar todo o conhecimento de planilhas e aprimorá-lo com o aprendizado de máquina.


As opiniões expressas neste artigo são do autor convidado e não necessariamente do Search Engine Land. Os autores da equipe estão listados aqui.