Lekce 4 - Google Apps Script - Časové spouštěče
V minulé lekci, Google Apps Script - Jednoduché a instalované spouštěče, jsme si ukázali použití jednoduchého
spouštěče (triggeru), funkce onOpen()
, a pak její proměnu na
instalovaný spouštěč, který již bylo nutné autorizovat.
V dnešní lekci si ukážeme, jak používat spouštěče řízené časem.
Vytvoření tabulky a skriptu
Vytvořme si novou tabulku, pojmenujeme ji, z menu zvolíme Nástroje -> Editor skriptu, skript si opět pojmenujeme a zkusíme napsat tuto funkci:
function tik() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A1'); var akt_cas = new Date(); range.setValue(akt_cas); }
První řádek již znáte, vrátí aktuální list tabulky, ke které je
skript přibalen. Na druhém vybereme buňku A1. Úplně
stejně bychom ji mohli vybrat zápisem sheet.getRange(1, 1)
. Na
dalším řádku si do proměnné akt_cas
uložíme aktuální
datum a čas. A na posledním řádku tuto hodnotu uložíme do buňky
A1.
Funkce tik()
je schválně zapsaná velmi "upovídaně". Mohli
bychom ji samozřejmě podstatně zkrátit a fungovala by úplně stejně.
Zkrácený zápis by vypadal takto:
function tik() { SpreadsheetApp.getActiveSheet().getRange('A1').setValue(new Date()); }
Pravidelné spouštění
Nyní si nastavíme pravidelné spouštění této funkce. Postup je úplně stejný jako v minulé lekci. V editoru skriptů v menu vybereme Upravit -> Spouštěče aktuálního projektu. Klikneme vpravo dole na tlačítko Přidat spouštěč, otevře se nám panel pro nastavení spouštění funkce.
Funkci tik()
máme již vybranou, protože je to jediná funkce,
kterou v editoru máme. Ve výběru Vybrat implementaci je jen
jediná možnost Head, takže opět není co vybírat. Volbu
Vyberte zdroj události nastavíme na Řízeno
časem. Když si pak rozbalíme volbu Vyberte typ časového
spouštěče, bude nabídka vypadat takto:
Podle toho, k jakému účelu časový spouštěč potřebujeme, si vybereme frekvenci spouštění. Časové spouštění je možné využít například pro pravidelnou automatickou kontrolu doručené pošty, kontrolu stavu nějakého webu a podobně.
Pro náš test si zkusme vybrat volbu Počítadlo minut a v poslední volbě "Vyberte interval v minutách" nastavíme "Každých 30 minut". Celý panel by tedy měl vypadat takto:
Klikneme na Uložit. Další postup je stejný, jaký jsme již absolvovali v minulé lekci. Skript je potřeba autorizovat. Jakmile autorizaci odklikáme, spouštěč se objeví v seznamu.
Od této chvíle by se měla funkce každých 30 minut spustit a do buňky A1 zapsat datum a čas, kdy se funkce aktivovala. Pokud si nyní tabulku kdykoliv otevřeme, neměl by být čas v buňce A1 starší než 30 minut od aktuálního času.
A pokud si aktualizujeme záložku, kde jsme definovali časový spouštěč, uvidíme rovněž čas posledního spuštění funkce a procento chyb při spuštění funkce.
Poznámky k časovým spouštěčům
Je potřeba upozornit, že Google negarantuje přesné časy, kdy se funkce spustí, dokonce záměrně časové funkce spouští s určitým rozptylem, takže časové spouštěče nelze používat pro činnosti, kde je potřeba dodržet přesný čas spuštění.
Také si všimněte, že časový interval v minutách si nelze nastavit libovolně, ale pouze z pevně daných hodnot.
Je asi celkem jasné, že v jednom projektu si můžeme vytvořit více časových spouštěčů a každý z nich může mít svůj vlastní interval spouštění a také provádět jinou činnost, tedy spouštět jinou funkci.
Protože všechny spouštěče běží na pozadí, je velice užitečné, že nám Google v případě havárie spouštěče pošle e-mail s bližším popisem chyby. Jak často má souhrn chyb posílat jsme si nastavili při zřizování spouštěče. A samozřejmě interval můžeme v nastavení spouštěče kdykoliv změnit.
Limity časovačů a Apps Scriptu obecně
V Apps Scriptu jsou pro řadu věcí nastavené limity, které skripty nemohou překročit. Všechny je přehledně najdete na této stránce.
Limity se liší podle verze účtu, který používáme, a celkem logicky jsou nejtvrdší pro účty zdarma, tedy pro Gmail verzi. A samozřejmě čím dražší verze, tím je zpravidla limit vyšší.
Pokud se např. podíváme na řádek Triggers total runtime, uvidíme tam pro Gmail verzi hodnotu 90 min/day. Jinými slovy, všechny spouštěče definované na našem účtu, mohou za 24 hodin běžet dohromady jen 90 minut.
A je samozřejmě jedno, v kterém skriptu spouštěč je, čas běhu všech spouštěčů se sčítá a po jeho překročení všechny spouštěče přestanou fungovat.
V přehledu chyb, který nám Google pošle, se pak dozvíme v kterých časech se spouštěč neprovedl pro překročení časového limitu. Po ukončení "dne" (myslím, že Google používá pacifický čas) se limit vynuluje a skripty se opět rozběhnou.
Takže kdykoliv se budeme chtít pustit do nějakého většího projektu v Apps Scriptu, je dobré se na aktuální limity podívat a udělat si propočet, jestli se s naším účtem do limitů vejdeme.
Řekněme, že si napíšeme skript, který bude kontrolovat stav nějakého webu. Já mám například skript, který mi hlídá dobíjecí akce Kaktusu a posílá mi e-mail, když se akce koná.
Pokud doba jednoho běhu skriptu bude 10 vteřin a budeme ho potřebovat spouštět každou minutu, pak jednoduchým propočtem zjistíme, že časové spouštěče na Gmail účtu pro tento účel nebudou to pravé.
Ale třeba již základní placená verze (stojí 5,2€ měsíčně na osobu) má pro spouštěče docela velkorysý limit 6 hodin.
Spouštěče řízené z kalendáře
Ještě se zmíníme o jedné možnosti využití spouštěčů.
V editoru skriptů v menu vybereme Upravit -> Spouštěče aktuálního projektu. Klikneme vpravo dole na tlačítko Přidat spouštěč a ve volbě Vyberte zdroj události si místo Řízeno časem nastavíme Z kalendáře.
Je třeba uvést e-mail majitele kalendáře, celé nastavení pak bude vypadat třeba takto:
Jak je z nastavení asi jasné, jakmile dojde v kalendáři ke změně, spouštěč se spustí. Kalendář samozřejmě nemusí patřit přímo nám, stačí, že pro nás bude nasdílený.
A nemusí být nasdílený jen pro nás, ale může to být řekněme kalendář sdílený pro celé jedno oddělení ve firmě.
Při každé změně v kalendáři se automaticky spustí skript, který kalendář projde, vyhodnotí změny a provede nějakou akci.
Řekněme, že vyhodnotí kolik z našich kamarádů již odpovědělo na naši pozvánku na bowling a pokud dostatečný počet odpověděl ano, pak nám pošle e-mail s připomínkou, abychom na večer zamluvili místo. Ne, na tohle asi nemá cenu psát skript, ale určitě vás napadne řada lepších využití.
Opakovaná autorizace spouštěče
A ještě poslední poznámka. Při vytváření spouštěče jsme skript autorizovali. Nyní funkci, kterou volá spouštěč, upravíme a přidáme do ní řekněme odeslání e-mailu.
Co se stane? Spouštěč je již vytvořený, takže autorizace se nespustí, ale skript nemá potřebná práva, proto jeho provedení havaruje a dozvíme se to ze souhrnného e-mailu chyb, který nám Google pošle.
Jak to opravit? Samozřejmě můžeme spouštěč smazat a vytvořit znovu, pak se autorizace spustí automaticky. A nebo použijeme jednodušší způsob a funkci, kterou spouštěč volá, spustíme ručně z editoru skriptů. Tím se vyvolá autorizace, potvrdíme nový rozsah práv a spouštěč může běžet.
Líbí se vám Apps Script a tento seriál? Pak nezapomeňte na hodnocení
Vyhovoval by vám rychlejší postup, nebo naopak potřebujete věci vysvětlit podrobněji? Nebo byste na vysvětlení některých věcí uvítali video? Chtěli byste nasdílet příklady, které popisuji? Napište mi připomínky i dotazy do komentářů, budu rád za každou zpětnou vazbu.
V příští lekci, Google Apps Script - Získání externích dat - Kurzy ČNB I, si ukážeme jak získáme externí data kurzovního lístku ČNB.