Znasz to uczucie – co rano musisz logować się do systemu reklamowego, CRM'a lub sklepu na Shopify, klikać "Eksportuj do CSV", a następnie ręcznie wklejać tysiące zamówień do Arkusza Google dla reszty zespołu. Tak wygląda potężny wyciek kapitału operacyjnego w firmach, które nie korzystają z pełnej potęgi tzw. API oraz możliwości Google Apps Script.

Zamiast kupować płatne, krępujące abonamenty na platformach no-code rzędu tysięcy złotych rocznie (jak Zapier czy Make), możesz wykorzystać wbudowane zaledwie jedno kliknięcie w Arkuszach Google środowisko (Apps Script IDE) służące do pisania rewelacyjnych integracji za darmo w języku JavaScript.

Co to jest Google Apps Script (GAS)?

To chmurowe środowisko programistyczne dostępne zupełnie za darmo dla każdej osoby posiadającej konto Google. Pozwala ono na m.in. na kontrolowanie każdego aspektu Arkusza (od formatowania komórek po masowe kasowanie danych), obsługę Gmail'a, Google Docs, a najważniejsze – umożliwia łączenie się z zewnętrznymi serwerami poprzez odpytywanie API (Application Programming Interface).

"Porzucenie płatnych wtyczek Zapier'a i przejście na lekki skrypt Google Apps Script potrafi uratować małej agencji marketingowej kilkaset Euro co miesiąc – wystarczy jeden, napisany raz, ustrukturyzowany skrypt."

Krok po kroku: Integracja API w Arkuszu Google

Zamiast rzucać pustą teorią, napiszemy skrypt, który połączy się wprost z pewnym publicznym systemem z ofertami walut NBP lub innym API REST, pobierze obiekt JSON z wymianą danych i wklei go natychmiastowo we wskazane komórki (A1:B1) – wszystko w 3 krótkich krokach wywołania biblioteki UrlFetchApp.

  1. Otwórz pusty lub swój własny dokument Arkuszy Google (Google Sheets).
  2. W górnym menu kliknij w szarą zakładkę Rozszerzenia -> Apps Script. Zobaczysz biały notatnik z pustą funkcją myFunction().
  3. Skasuj kod na platformie i wklej nasz inżynieryjny zarys integracji GET wymieniony w dalszej sekcji!

Inżynieria Zapytań: JSON a UrlFetchApp

Działający silnik zapytania GET wygląda następująco. Wdrożyłem poniżej czysty kod z odpowiednim przypisaniem zmiennych do kolumn Arkuszy Sheets:

function pobierzDaneZAPI() {
  // Zmienna przechowująca link do Endpointu API (tu przykładowe API z kursami)
  var urllink = "https://api.nbp.pl/api/exchangerates/rates/a/usd/?format=json";
  
  // Wbudowana w silnik V8 metoda pobierająca odpowiedź z internetu
  var response = UrlFetchApp.fetch(urllink);
  
  // Odszyfrowanie zwróconego tekstu wprost na język JSON obiektu
  var json = JSON.parse(response.getContentText());
  
  // Wydobycie konkretnej liczby z plątaniny struktury API
  var kursWaluty = json.rates[0].mid;
  var dataOdczytu = json.rates[0].effectiveDate;
  
  // Połączenie z Arkuszem Kalkulacyjnym B2B Bazy
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Bezpośredni zrzut danych z API w komórki A1 i B1
  sheet.getRange("A1").setValue("Kurs USD z " + dataOdczytu);
  sheet.getRange("B1").setValue(kursWaluty);
}

Dodaj do tego Automatyczny Harmonogram!

Znalazłeś skarb w swoim arkuszu, pobrałeś kliknięciem przycisku dane bezpośrednio z infrastruktury dewelopera omijając "File Upload". Ale po co wpisywać tam komendy ręcznie? Skrypty Google posiadają moduł Zegarów Sterujących (tzw. Wyzwalaczy Time-Driven Triggers):

  • Po lewej stronie ekranu w GAS znajdź menu "Wyzwalacze" (ikonka zegara).
  • Kliknij "Dodaj wyzwalacz", przypisz swoją funkcję pobierzDaneZAPI(), w "Wybierz rodzaj źródła zdarzenia" wybierz "Oparte na czasie" i np. "Wyzwalacz z ujęciem wg minut - Co 15 minut".
  • Zapisz. Platforma sama będzie wywoływała Twój skrypt w tle dla biznesu, nawet gdy Twój komputer będzie odłączony od sieci! Zbudujesz tak pełnoprawny, darmowy ETL (Extract, Transform, Load) dla mniejszych wolumenów operacyjnych.

Kwestie Ograniczeń Architektury

Musisz pamiętać tylko o tak zwanym hard-limicie i Quotas nałożonych przez Google, na które możesz trafić wprowadzając 100 tysięcy wierszy na raz za pomocą funkcji z rzędu `setValues()`. Jeśli pobierasz gigantyczne ilości e-commerce zamówień (rzędu 25MB w formacie JSON), po 6 minutach egzekucji skrypt zatrzyma się zwracając timeout error. Dodatkowo sam dokument Spreadsheet załamie się od limitów powielanych komórek w chmurze obciążających serwery bazodanowe BQ i Looker Studio w jednym. A to wymaga wejścia na instancje wyższego rzędu (Google Cloud / GCP).