Lekce 4 — časové spouštěče

Jan Hora
AppSatori
Published in
5 min readOct 23, 2019

V minulé lekci, 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šší. Ještě si všimněte, že Google si vyhrazuje právo limity kdykoliv změnit. Naštěstí je zpravidla zvyšuje.

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 Gmail účtu, mohou za 24 hodin běžet dohromady maximálně 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 Basic (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 třeba 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.

V příští lekci si ukážeme praktické využití toho, co jsme se zatím naučili, na stahování kurzovního lístku ČNB.

--

--