Google E-Tablolar'da özel bir işlevle Deniz Feneri Puanları nasıl gösterilir?

Yayınlanan: 2020-11-19

Otomasyon ve makine öğrenimi, pazarlamada hepimize yardımcı olmak için muazzam bir potansiyele sahiptir. Ancak şu anda bu araçların birçoğu, kodlayamayan veya biraz kod yazabilen ancak bu konuda pek rahat olmayan kişiler için erişilemez durumda.

Sıklıkla olan şey, ofiste kod yazma ve düzenleme konusunda rahat olan bir veya iki kişinin olması ve sonra bu kişilerin diğer herkesin çalıştırdığı komut dosyaları ve defterler üretmesidir. İş akışı biraz şuna benzer:

İnsanların bir komut dosyası çalıştırması ve çıktıyı biçimlendirmesi gereken adımları kaldırmak için bu iş akışını kolaylaştırmanın basit bir yolunu göstereceğim. Bunun yerine, otomasyonu doğrudan Google E-Tablolar içinden çalıştırabilirler.

Size göstereceğim örnek, bu gif'teki gibi bir URL için Lighthouse puanını döndüren bir E-Tablolar özel işlevi içindir:

Size göstereceğim yöntem, bunu yapmanın tek yolu değil, ancak makine öğrenimi algoritmaları da dahil olmak üzere birçok şey için kullanılabilecek çok daha genel bir tekniği gösteriyor.

İki bölüm var:

  1. Karmaşık işleri yapacak (bu durumda bir Lighthouse testi çalıştıracak) ve HTTP isteklerine yanıt verecek bir Google Cloud Run uygulaması.
  2. 1. adımda oluşturduğunuz API'ye isteklerde bulunacak ve sonuçları Google E-tablosuna döndürecek bir Appscript özel işlevi.

Bulutla çalışan uygulamalar

Cloud Run, sağladığınız bir docker görüntüsünü alıp HTTP üzerinden kullanılabilir hale getiren bir Google hizmetidir. Yalnızca bir HTTP isteği yapıldığında ödeme yaparsınız, bu nedenle 7/24 kullanılmayan böyle bir hizmet için çok ucuzdur. Gerçek maliyet, ne kadar kullandığınıza bağlı olacaktır, ancak binlerce test çalıştırmak için ayda 1 dolardan daha azını tahmin ediyorum.

Yapmamız gereken ilk şey, ona HTTP talebinde bulunduğumuzda Lighthouse analizini gerçekleştirecek bir Docker imajı yapmaktır. Neyse ki bizim için Github'da programatik olarak bir Lighthouse denetiminin nasıl çalıştırılacağını gösteren bazı belgeler var. Bağlantılı kod, yanıtı HTTP üzerinden döndürmek yerine analizi bir dosyaya kaydeder, ancak her şeyi bir Express uygulamasına şu şekilde sararak bunu düzeltmek kolaydır:

 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}`); });

Bu kodu index.js olarak kaydedin.

Ardından, yukarıdaki uygulamanın nasıl kurulacağını açıklayan package.json adında bir dosyaya ve Dockerfile'a ihtiyacınız olacak, böylece her şeyi Docker'da toplayabiliriz. Tüm kod dosyaları Github'da mevcuttur.

 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" ]

Docker görüntüsünü oluşturun ve ardından işleri kendi bilgisayarınızda yerel olarak şu şekilde test edebilirsiniz:

Önce görüntüyü başlatın:

 docker run -p 8080:8080 lighthouse-sheets

Ve sonra çalışıp çalışmadığını test edin:

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

Veya tarayıcınızda localhost: 8080? Url = https% 3A% 2F% 2Fwww.example.com adresini ziyaret edin. Çok fazla JSON görmelisiniz.

Sonraki adım, görüntünüzü Google Kapsayıcı kaydına aktarmaktır. Benim için bu basit bir komut:

 docker push gcr.io/MY_PROJECT_ID/lighthouse-sheets

Ancak bunu yapmadan önce docker kimlik doğrulamasını kurmanız gerekebilir. Alternatif bir yöntem, görüntüyü oluşturmak için Google Cloud Build'i kullanmaktır; Kimlik doğrulamayı çalıştıramazsanız bu sizin için daha iyi sonuç verebilir.

Daha sonra bu docker görüntüsü ile bir Cloud Run hizmeti oluşturmanız gerekir.

Cloud Run'ı açın ve "Hizmet oluştur" u tıklayın

Ayarları adlandırın ve düzenleyin. Hizmetinize bir ad vermeli ve diğer birkaç ayarı yapılandırmalısınız:

Siteleriniz için hedef kitlenin çoğunun yaşadığı yere yakın bir bölge seçmek en iyisidir. Tokyo'daki bir Birleşik Krallık sitesi için site hızını kontrol etmek, size hedef kitlenizin elde ettiği sonuçları vermeyecektir.

Bu hizmeti Google E-Tablolar'dan aramanız için, kimliği doğrulanmamış çağrılara izin vermesi gerekir. Diğer kişilerin onu kullanmasını engellemek için hizmeti kilitlemekten ve güvenliğini sağlamaktan endişe ediyorsanız, bunu (örneğin) HTTP isteğindeki bir API sırrını kontrol ederek veya buna benzer bir şey yaparak yapmanız gerekecektir.

Daha sonra daha önce yaptığınız kabı seçmelisiniz. İsmi hatırlıyorsanız yazabilir veya "Seç" i tıklayıp menüden seçebilirsiniz.

Daha sonra yapılacak daha fazla yapılandırma olduğundan "Gelişmiş Ayarları Göster" i tıklayın.

Bellek tahsisini artırmanız gerekir çünkü Lighthouse testlerinin çalışması için 256Mb'den daha fazlası gerekir. Burada 1GiB'yi seçtim ancak bazı siteler için maksimum 2GiB ödeneğine ihtiyacınız olabilir.

Eşzamanlılığı 1'e düşürmenin hizmetin güvenilirliğini artırdığını buldum. Bu, Google'ın her HTTP isteği için otomatik olarak yeni bir kapsayıcı başlatacağı anlamına gelir. Olumsuz yanı, bunun biraz daha fazla paraya mal olmasıdır.

"Oluştur" u tıklayın ve Cloud Run hizmetiniz kısa süre içinde hazır olacaktır.

URL'yi kullanarak hızlı bir test yapabilirsiniz. Örneğin:

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

Veya tarayıcınızda https://lighthouse-sheets-public-v4e5t2rofa-nw.a.run.app?url=https%3A%2F%2Fwww.example.com adresini ziyaret edin.

Bir sonraki adım, yeni API'nizi Google E-Tablolar'dan kullanabilmeniz için bir Appscript yazmaktır.

Yeni bir Google E-Tablosu açın ve Appscript düzenleyicisini açın.

Bu, Google E-Tablolar özel işlevinizi kodlayabileceğiniz yeni bir sekme açacaktır.

Buradaki temel fikir, API'nize HTTP isteğini gerçekleştirmek için Appscript UrlFetchApp işlevini kullanmaktır. Bunu yapmak için bazı temel kodlar şuna benzer:

 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) }

Son satır, genel performans puanını sayfaya döndürür. Başka bir şey iade etmek için onu düzenleyebilirsiniz. Örneğin, SEO puanını almak için bunun yerine result.categories.seo.score kullanın.

Veya aşağıdaki gibi bir liste döndürerek birden çok sonuç sütunu döndürebilirsiniz:

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

Dosyayı kaydedin ve ardından Google Sayfanızda LIGHTHOUSE adlı özel bir işleve sahip olacaksınız.

Buna başlamanın en kolay yolu, örnek Google Sayfamı kopyalamak ve ardından kodu kendi API'nizi gösterecek şekilde kendiniz güncellemektir ve en çok ilgilendiğiniz Lighthouse sonuçlarını döndürmektir.

Elektronik tablo bilginizi geliştirin

Bu yöntemin en güzel yanı, bir Docker konteynerine sarılabilen ve 30 saniye içinde bir sonuç döndüren her şey için çalışabilmesidir. Maalesef Google E-Tablolar özel işlevlerinin bir zaman aşımı vardır, bu nedenle bazı büyük derin öğrenme algoritmalarını eğitmek için yeterince uzun olmayacaksınız, ancak yine de yapabileceğiniz çok şey kalıyor.

Google E-Tablolar eklentisi Forecast Forge için çok benzer bir işlem kullanıyorum, ancak bir Lighthouse puanı döndürmek yerine, içine koyduğunuz sayılar için makine öğrenimi destekli bir tahmin döndürüyor.

Bu tür şeylerin olanakları gerçekten heyecan verici çünkü Arama Pazarlamasında elektronik tablolar konusunda çok iyi olan pek çok insan var. Tüm elektronik tablo bilgilerini kullanabildiklerinde neler yapabileceklerini görmek ve bunu makine öğrenimiyle geliştirmelerini istiyorum.


Bu makalede ifade edilen görüşler konuk yazara aittir ve mutlaka Arama Motoru Arazisi değildir. Personel yazarları burada listelenmiştir.