Come mostrare i punteggi del faro in Fogli Google con una funzione personalizzata
Pubblicato: 2020-11-19L'automazione e l'apprendimento automatico hanno un enorme potenziale per aiutare tutti noi nel marketing. Ma al momento molti di questi strumenti sono inaccessibili a persone che non possono programmare o che possono programmare un po 'ma non sono davvero a proprio agio con esso.
Quello che succede spesso è che ci sono una o due persone in ufficio che si sentono a proprio agio con la scrittura e la modifica del codice e poi queste persone producono script e taccuini che tutti gli altri eseguono. Il flusso di lavoro assomiglia un po 'a questo:

Ti mostrerò un modo semplice per semplificare questo flusso di lavoro per rimuovere i passaggi in cui le persone devono eseguire uno script e formattare l'output. Possono invece eseguire l'automazione direttamente da Fogli Google.
L'esempio che ti mostrerò è per una funzione personalizzata di Fogli che restituisce il punteggio di Lighthouse per un URL come in questa gif:

Il metodo che ti mostrerò non è l'unico modo per farlo, ma illustra una tecnica molto più generale che può essere utilizzata per molte cose, inclusi gli algoritmi di apprendimento automatico.
Ci sono due parti:
- Un'applicazione Google Cloud Run che farà le cose complicate (in questo caso eseguirà un test Lighthouse) e che risponderà alle richieste HTTP.
- Una funzione personalizzata di Appscript che invierà richieste all'API che hai creato nel passaggio 1 e restituirà i risultati nel foglio Google.
Applicazioni cloud run
Cloud Run è un servizio Google che acquisisce un'immagine Docker da te fornita e la rende disponibile su HTTP. Paghi solo quando viene effettuata una richiesta HTTP, quindi per un servizio come questo che non viene utilizzato 24 ore su 24, 7 giorni su 7, è molto economico. Il costo effettivo dipenderà da quanto lo usi, ma stimerei meno di $ 1 al mese per eseguire migliaia di test.
La prima cosa che dobbiamo fare è creare un'immagine Docker che eseguirà l'analisi di Lighthouse quando le facciamo una richiesta HTTP. Fortunatamente per noi c'è della documentazione che mostra come eseguire un audit di Lighthouse in modo programmatico su Github. Il codice collegato salva l'analisi in un file piuttosto che restituire la risposta su HTTP, ma questo è facile da risolvere avvolgendo il tutto in un'app Express come questa:
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}`); });
Salva questo codice come index.js.
Quindi avrai anche bisogno di un file chiamato package.json che descrive come installare l'applicazione sopra e un Dockerfile in modo da poter avvolgere tutto in Docker. Tutti i file di codice sono disponibili su 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" ]
Costruisci l'immagine docker e poi puoi testare le cose localmente sul tuo computer in questo modo:
Per prima cosa avvia l'immagine:
docker run -p 8080:8080 lighthouse-sheets
E poi prova per vedere se funziona:
curl -v "localhost:8080?url=https%3A%2F%2Fwww.example.com"
Oppure visita localhost: 8080? Url = https% 3A% 2F% 2Fwww.example.com nel tuo browser. Dovresti vedere molto JSON.
Il passaggio successivo è eseguire il push della tua immagine nel registro di Google Container. Per me questo è un semplice comando:

docker push gcr.io/MY_PROJECT_ID/lighthouse-sheets
Ma potresti dover prima configurare l'autenticazione docker prima di poterlo fare. Un metodo alternativo è l'utilizzo di Google Cloud Build per creare l'immagine; questo potrebbe funzionare meglio per te se non riesci a far funzionare l'autenticazione.
Successivamente è necessario creare un servizio Cloud Run con questa immagine Docker.
Apri Cloud Run e fai clic su "Crea servizio"

Assegna un nome e regola le impostazioni. È necessario assegnare un nome al servizio e configurare alcune altre impostazioni:

È meglio scegliere una regione vicina a dove risiede la maggior parte del pubblico dei tuoi siti. Controllare la velocità del sito per un sito del Regno Unito da Tokyo non ti darà gli stessi risultati di quello che ottiene il tuo pubblico.
Per poter chiamare questo servizio da Fogli Google, deve consentire chiamate non autenticate. Se sei preoccupato di bloccare e proteggere il servizio per impedire ad altre persone di usarlo, dovrai farlo (ad esempio) controllando da un segreto API nella richiesta HTTP o qualcosa del genere.
Successivamente devi selezionare il contenitore che hai creato in precedenza. Puoi digitare il nome se lo ricordi o fare clic su "Seleziona" e sceglierlo dal menu.

Quindi fare clic su "Mostra impostazioni avanzate" perché ci sono ulteriori configurazioni da fare.

È necessario aumentare l'allocazione di memoria perché i test Lighthouse richiedono più di 256 Mb per essere eseguiti. Ho scelto 1GiB qui, ma potresti aver bisogno del limite massimo di 2GiB per alcuni siti.
Ho scoperto che ridurre la concorrenza a 1 migliora l'affidabilità del servizio. Ciò significa che Google avvierà automaticamente un nuovo contenitore per ogni richiesta HTTP. Lo svantaggio è che questo costa leggermente più soldi.
Fai clic su "Crea" e il tuo servizio Cloud Run sarà pronto a breve.

Puoi fare un rapido test utilizzando l'URL. Per esempio:
curl -v "https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com"
Oppure visita https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com nel tuo browser.
Il prossimo passo è scrivere un po 'di Appscript in modo da poter utilizzare la tua nuova API da Fogli Google.
Apri un nuovo foglio Google e apri l'editor di Appscript.

Si aprirà una nuova scheda in cui puoi codificare la funzione personalizzata di Fogli Google.
L'idea chiave qui è usare la funzione UrlFetchApp Appscript per eseguire la richiesta HTTP alla tua API. Un codice di base per eseguire questa operazione è simile a questo:
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) }
L'ultima riga restituisce il punteggio complessivo delle prestazioni nel foglio. Puoi modificarlo per restituire qualcos'altro. Ad esempio, per ottenere il punteggio SEO, usa invece result.categories.seo.score.
Oppure puoi restituire più colonne di risultati restituendo un elenco come questo:
[result.categories.performance.score, result.categories.seo.score]
Salva il file e avrai una funzione personalizzata disponibile nel tuo foglio Google chiamata LEUCHTTURM.
Il modo più semplice per iniziare è copiare il mio foglio Google di esempio e quindi aggiornare il codice in modo che punti alla tua API e restituire i risultati di Lighthouse che ti interessano di più.
Migliora il tuo know-how sui fogli di calcolo
La cosa grandiosa di questo metodo è che può funzionare per tutto ciò che può essere avvolto in un contenitore Docker e restituire un risultato entro 30 secondi. Sfortunatamente le funzioni personalizzate di Fogli Google hanno un timeout, quindi non avrai abbastanza tempo per addestrare un enorme algoritmo di apprendimento profondo, ma questo lascia ancora molto che puoi fare.
Uso un processo molto simile per il mio componente aggiuntivo di Fogli Google Forecast Forge, ma invece di restituire un punteggio Lighthouse restituisce una previsione basata sull'apprendimento automatico per qualsiasi numero tu inserisca.
Le possibilità per questo genere di cose sono davvero entusiasmanti perché nel marketing di ricerca abbiamo molte persone che sono molto brave con i fogli di calcolo. Voglio vedere cosa possono fare quando possono utilizzare tutta la loro conoscenza del foglio di calcolo e migliorarla con l'apprendimento automatico.
Le opinioni espresse in questo articolo sono quelle dell'autore ospite e non necessariamente Search Engine Land. Gli autori del personale sono elencati qui.