Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Lekce 5 - Google Apps Script - Získání externích dat - Kurzy ČNB I

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Minule, v lekci Google Apps Script - Časové spouštěče, jsme si ukázali jednoduchý časový spouštěč, který jen aktualizoval datum a čas v buňce tabulky. Dnes si ukážeme trochu praktičtější příklad.

Kurzovní lístek ČNB

Napíšeme si skript, který bude každý den stahovat devizové kurzy ČNB a ukládat je do tabulky, každý den na samostatný list.

A vyzkoušíme si ještě jednu novinku, skript nebudeme přibalovat k tabulce, ale vytvoříme ho jako samostatný soubor. A jako bonus si něco málo povíme o ladění skriptů.

Bude to trochu delší povídání, celý příklad jsem proto rozdělil na tři části.

Vytvoření skriptu a tabulky

Na Disku klikneme na Přidat, založíme si novou tabulku a pojmenujeme ji např. Kurzy ČNB. Opět na Disku klikneme na Přidat a rozbalíme si poslední možnost Více. Pokud v nabídce máme položku Google Apps Script, vybereme ji a otevře se nám nová záložka s editorem skriptů.

Pokud nám Google Apps Script v nabídce chybí, přečtěte si návod, jak ho do nabídky doplnit a k vašemu Disku aplikaci připojte.

Kdo si chce ušetřit práci s psaním, může si hotové skripty otevřít na této adrese.
Přes volbu Soubor - Vytvořit kopii si je pak můžete uložit na svůj Disk.

Má tabulka s kurzy je k nahlédnutí tady. Je nasdílená pouze pro prohlížení, vaše skripty do ní zapisovat tedy nemohou. Můžete se ale podívat, jestli moje skripty fungují a plní tabulku novými kurzy.

Máme tedy jednu záložku s tabulkou a druhou záložku s editorem skriptů. Editor vypadá úplně stejně, jako když jsme vytvářeli skript připojený k tabulce.

I další postup je stejný, tedy klikneme na název Projekt bez názvu a nějak svůj první skript pojmenujeme, např. KurzyCNB.

Kroky řešení

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Můžeme se pustit do přemýšlení, jak náš úkol vyřešit. Jedna z hlavních zásad programování je rozdělit si zadání na menší části, které budou snáze pochopitelné a řešitelné. U takto jednoduché úlohy s tím nebude problém a jednotlivé kroky si můžeme rovnou vypsat:

  1. otevření tabulky
  2. vytvoření listu s názvem podle dnešního data
  3. získání kurzů ČNB pro dnešní den
  4. zápis kurzů na list tabulky

Až nám bude vše fungovat, vytvoříme časový spouštěč, který se bude denně spouštět a kurzy ukládat do tabulky.

Jdeme na to.

1 - Otevření tabulky

Dokud jsme měli skript přibalený k tabulce, mohli jsme tabulku získat metodou:

var tabulka = SpreadsheetApp.getActive();

Čili "vezmi právě aktivní tabulku", tedy tu, ke které je skript připojený. Teď máme skript jako samostatný soubor a žádnou připojenou tabulku nemá, proto musíme tabulku získat jinak.

ID tabulky

Dvě nejjednodušší možnosti jsou najít ji podle jejího ID, nebo podle adresy (URL).

URL je to, co je zapsané v adresním řádku, pokud máte vaši tabulku otevřenou. Má tabulka vypadá takto:

URL a ID tabulky v Dokumentech Google

Orámovaná část je URL, podtržená část mezi dvěma lomítky je ID tabulky. Do svého editoru skriptů si jednoduše zkopírujeme URL, nebo z něj vybereme jen ID a tabulku pak otevřeme jedním z těchto způsobů:

function otevri_tabulku() {
  var url = 'https://docs.google.com/spreadsheets/d/14Ek-0DeVwmanKWMcLUIChKLUbWKnSjGWvPrQTuxJBRs/edit#gid=1736117475';
  var tabulka = SpreadsheetApp.openByUrl(url);
  return tabulka
}

function otevri_tabulku() {
  var id = '14Ek-0DeVwmanKWMcLUIChKLUbWKnSjGWvPrQTuxJBRs';
  var tabulka = SpreadsheetApp.openById(id);
  return tabulka
}

Oba výše uvedené způsoby jsou shodné, vyberte si, který uznáte za vhodný.

Parametrizace funkce

URL i ID jsme napevno zadali do funkce, ale funkce by spíš měla ID dostat jako parametr a měla by tedy vypadat spíše takto:

function otevri_tabulku(id) {
  return SpreadsheetApp.openById(id)
}

Funkci pak můžeme volat pokaždé s jiným ID. Jinými slovy, stejný skript může fungovat univerzálně a ukládat kurzy ČNB do libovolné tabulky, nebo několika různých tabulek. Jedinou podmínkou je, aby měl k tabulce přístup a mohl do ní zapisovat. Jinak je úplně jedno, komu tabulka patří, nebo na kterém Disku leží.

Co by se stalo, pokud by skript k tabulce přístup neměl? Pak ji samozřejmě nedokáže otevřít a skript havaruje. Pro reálné použití by tuto situaci bylo potřeba ošetřit, skript by měl chybu zapsat do nějakého logu a případně nám poslat e-mail o tom, kde došlo k chybě, o jakou tabulku se jedná a podobně.

Abychom id nebo url tabulky neměli zapsané přímo ve funkci, založíme si globální proměnnou, do které si id tabulky uložíme. Globální proměnná je automaticky dostupná kdekoli ve skriptu:

var table_id = '14Ek-0DeVwmanKWMcLUIChKLUbWKnSjGWvPrQTuxJBRs';

Vy si samozřejmě do svých skriptů dejte id své tabulky, do mé nemáte možnost zapisovat.

Definici proměnné vložíme hned na začátek skriptu, aby byla k dispozici, než se začne provádět funkce, která ji bude vyžadovat.

Pokud jste trochu zběhlejší v jazyce JavaScript, pak asi víte, že u globálních proměnných hrozí, že použijeme stejný název globální proměnné na jiném místě programu a přepíšeme si původní hodnotu. Ale to u našeho miniskriptu nehrozí, takže můžeme globální proměnnou klidně použít.

A ještě jedna poznámka. Naše proměnná table_id se nebude v průběhu skriptu měnit a je to tedy vlastně konstanta. Není to žádné dogma, ale často se pro proměnné, které se nemění, používají názvy psané velkými písmeny. Takže místo table_id bychom použili název TABLE_ID. Program je pak pro nás lépe čitelný a srozumitelný.

Protože má funkce pro otevření tabulky v podstatě jeden řádek, nebudeme ji ani jako samostatnou funkci psát, ale tabulku si otevřeme ve funkci, která bude vytvářet list pro dnešní den.

2 - Vytvoření listu s názvem podle dnešního data

Tabulku otevřít umíme a teď v ní potřebujeme vytvořit list s názvem shodným s dnešním datem. Napíšeme si tedy funkci, která jako parametry dostane dnešní datum a id tabulky. Vrátí pak list s názvem podle data. Je potřeba si připomenout, že tabulka nemůže mít 2 listy se shodným názvem. Funkci si ukážeme:

function zaloz_list(dnes, tabulka) {
  var sheet = tabulka.getSheetByName(dnes); // najdi v tabulce list podle jména
  if(sheet == null) { // list neexistuje
    sheet = tabulka.insertSheet(dnes); // vytvoř list
  }
  return sheet; // vrať list
}

Myslím, že funkčnost je celkem jasná. Funkce se pokusí najít list podle názvu. Pokud neexistuje, vytvoří ho. List pak vrátí.

V další části, Google Apps Script - Získání externích dat - Kurzy ČNB II, se již pustíme do čtení a zpracování dat z ČNB.

Líbí se vám Apps Script a tento seriál?
A dočetli jste až do konce?
Pak nezapomeňte na hodnocení ;-)

A pište mi připomínky i dotazy do komentářů, budu rád za každou zpětnou vazbu.


 

 

Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!