Cómo mostrar Lighthouse Scores en Google Sheets con una función personalizada
Publicado: 2020-11-19La automatización y el aprendizaje automático tienen un enorme potencial para ayudarnos a todos en el marketing. Pero por el momento, muchas de estas herramientas son inaccesibles para las personas que no pueden codificar o que pueden codificar un poco pero que no se sienten realmente cómodas con ellas.
Lo que sucede a menudo es que terminan siendo una o dos personas en la oficina que se sienten cómodas escribiendo y editando código y luego estas personas producen scripts y cuadernos que todos los demás ejecutan. El flujo de trabajo se parece un poco a esto:

Le mostraré una forma sencilla de optimizar este flujo de trabajo para eliminar los pasos en los que las personas necesitan ejecutar un script y formatear la salida. En su lugar, pueden ejecutar la automatización directamente desde Google Sheets.
El ejemplo que le mostraré es para una función personalizada de Sheets que devuelve la puntuación Lighthouse para una URL como en este gif:

El método que les mostraré no es la única manera de hacer esto, pero ilustra una técnica mucho más general que se puede usar para muchas cosas, incluidos los algoritmos de aprendizaje automático.
Hay dos partes:
- Una aplicación de Google Cloud Run que hará las cosas complicadas (en este caso ejecutará una prueba Lighthouse) y que responderá a las solicitudes HTTP.
- Una función personalizada de Appscript que realizará solicitudes a la API que creó en el paso 1 y devolverá los resultados a la hoja de Google.
Aplicaciones ejecutadas en la nube
Cloud Run es un servicio de Google que toma una imagen de la ventana acoplable que usted proporciona y la pone a disposición a través de HTTP. Solo paga cuando se realiza una solicitud HTTP, por lo que para un servicio como este que no se usa las 24 horas del día, los 7 días de la semana, es muy barato. El costo real dependerá de cuánto lo use, pero calcularía menos de $ 1 por mes para ejecutar miles de pruebas.
Lo primero que debemos hacer es crear una imagen de Docker que realizará el análisis de Lighthouse cuando le hagamos una solicitud HTTP. Afortunadamente para nosotros, hay documentación que muestra cómo ejecutar una auditoría de Lighthouse mediante programación en Github. El código vinculado guarda el análisis en un archivo en lugar de devolver la respuesta a través de HTTP, pero esto es fácil de solucionar envolviendo todo en una aplicación Express como esta:
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}`); });
Guarde este código como index.js.
Luego, también necesitará un archivo llamado package.json que describe cómo instalar la aplicación anterior y un Dockerfile para que podamos envolver todo en Docker. Todos los archivos de código están disponibles en 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" ]
Cree la imagen de la ventana acoplable y luego puede probar cosas localmente en su propia computadora de esta manera:
Primero inicie la imagen:
docker run -p 8080:8080 lighthouse-sheets
Y luego prueba para ver si funciona:
curl -v "localhost:8080?url=https%3A%2F%2Fwww.example.com"
O visite localhost: 8080? Url = https% 3A% 2F% 2Fwww.example.com en su navegador. Debería ver mucho JSON.

El siguiente paso es enviar su imagen al registro de contenedores de Google. Para mí, este es un comando simple:
docker push gcr.io/MY_PROJECT_ID/lighthouse-sheets
Pero es posible que primero deba configurar la autenticación de la ventana acoplable antes de poder hacer esto. Un método alternativo es el uso de Google Cloud Build para hacer la imagen; esto podría funcionar mejor para usted si no puede hacer que funcione la autenticación.
A continuación, debe crear un servicio Cloud Run con esta imagen de la ventana acoplable.
Abra Cloud Run y haga clic en "Crear servicio"

Nombre y ajuste la configuración. Debes darle un nombre a tu servicio y configurar algunas otras configuraciones:

Es mejor elegir una región que esté cerca de donde vive la mayoría de la audiencia de sus sitios. Verificar la velocidad del sitio para un sitio del Reino Unido desde Tokio no le dará los mismos resultados que los que obtiene su audiencia.
Para que pueda llamar a este servicio desde Google Sheets, debe permitir invocaciones no autenticadas. Si le preocupa bloquear y asegurar el servicio para evitar que otras personas lo usen, tendrá que hacerlo (por ejemplo) verificando un secreto de API en la solicitud HTTP o algo así.
A continuación, debe seleccionar el contenedor que hizo anteriormente. Puede escribir el nombre si lo recuerda o hacer clic en "Seleccionar" y elegirlo en el menú.

Luego haga clic en "Mostrar configuración avanzada" porque hay más configuración por hacer.

Debe aumentar la asignación de memoria porque las pruebas Lighthouse necesitan más de 256 Mb para ejecutarse. He elegido 1GiB aquí, pero es posible que necesite la asignación máxima de 2GiB para algunos sitios.
Descubrí que reducir la concurrencia a 1 mejora la confiabilidad del servicio. Esto significa que Google iniciará automáticamente un nuevo contenedor para cada solicitud HTTP. La desventaja es que esto cuesta un poco más de dinero.
Haga clic en "Crear" y su servicio Cloud Run estará listo en breve.

Puedes darle una prueba rápida usando la URL. Por ejemplo:
curl -v "https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com"
O visite https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com en su navegador.
El siguiente paso es escribir algo de Appscript para que pueda usar su nueva API desde Google Sheets.
Abra una nueva hoja de Google y abra el editor de Appscript.

Esto abrirá una nueva pestaña donde puede codificar su función personalizada de Hojas de cálculo de Google.
La idea clave aquí es usar la función Appscript UrlFetchApp para realizar la solicitud HTTP a su API. Algún código básico para hacer esto se ve así:
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) }
La última línea devuelve la puntuación de rendimiento general a la hoja. Puede editarlo para devolver algo más. Por ejemplo, para obtener la puntuación de SEO, utilice result.categories.seo.score en su lugar.
O puede devolver varias columnas de resultados devolviendo una lista como esta:
[result.categories.performance.score, result.categories.seo.score]
Guarde el archivo y luego tendrá una función personalizada disponible en su hoja de Google llamada LIGHTHOUSE.
La forma más fácil de comenzar con esto es copiar mi hoja de Google de ejemplo y luego actualizar el código usted mismo para apuntar a su propia API y devolver los resultados de Lighthouse que más le interesan.
Mejore sus conocimientos sobre hojas de cálculo
Lo mejor de este método es que puede funcionar para cualquier cosa que se pueda envolver en un contenedor Docker y devolver un resultado en 30 segundos. Desafortunadamente, las funciones personalizadas de Google Sheets tienen un tiempo de espera, por lo que no tendrá el tiempo suficiente para entrenar un algoritmo de aprendizaje profundo masivo, pero eso aún deja mucho que puede hacer.
Utilizo un proceso muy similar para mi complemento de Google Sheets Forecast Forge, pero en lugar de devolver una puntuación de Lighthouse, devuelve un pronóstico basado en aprendizaje automático para los números que ingrese.
Las posibilidades para este tipo de cosas son realmente emocionantes porque en Search Marketing tenemos muchas personas que son muy buenas con las hojas de cálculo. Quiero ver qué pueden hacer cuando pueden usar todo su conocimiento sobre hojas de cálculo y mejorarlo con el aprendizaje automático.
Las opiniones expresadas en este artículo pertenecen al autor invitado y no necesariamente a Search Engine Land. Los autores del personal se enumeran aquí.