Pojďme programovat elektroniku | GitHub

Americké volby po minutě. Vývojáři postavili web na GitHubu pomocí Pages a automatu Actions. Vyzkoušíme jej

Pokud posledních pár desítek hodin hltáte americké volby, možná jste už také narazili na stránku Battleground State Changes, která se pokouší sledovat výsledky tak, jak to bohužel ostatní nedělají. V čase.

Klepněte pro větší obrázek
Jak se vyvíjí sčítání hlasů v klíčových státech na GitHubu

V textovém výstupu tedy uvidíte nejen to, jak si Biden s Trumpem stojí v několika nerozhodných státech po poslední aktualizaci sečtených hlasů, ale jak se tyto počty vyvíjely v průběhu času mnohdy minutu po minutě. S toho lze mnohem lépe předpovědět, jak to nakonec dopadne.

Tady jsme ale na Živě.cz, takže nás spíše zajímá, jak to ta stránka vlastně zjišťuje. Je celá postavená na GitHubu, respektive na jeho publikační části Pages, a sama také průběžně stahuje výsledky z nejrůznějších zdrojů.

Dělá to periodicky pomocí další vestavěné a skvělé funkce Actions. Takovou akcí může být spuštění v podstatě jakéhokoliv skriptu, přičemž ten může být i časově automatizovaný třeba pomocí linuxové služby cron.

Počasí ve formátu METAR na serveru NOAA

Dejme tomu, že by nás namísto voleb zajímalo počasí a chtěli bychom do svého repozitáře třeba každých pět minut stahovat textové soubory ze serverů NOAA s počasím pro Brno ve formátu METAR.

Klepněte pro větší obrázekKlepněte pro větší obrázek
HTTP server NOAA s průběžně aktualizovanými meteozprávami ve formátu METAR a jedna z nich pro stanici LKTB – tuřanské letiště v Brně

Jedná se o systém meteorologických zpráv pro letce ze stanic na vybraných letištích. To brněnské má kód LKTB a najdeme jej i v tomto obrovském adresáři NOAA jako soubor LKTB.TXT.

Formát METAR je složitý, takže nebudeme zkoumat, co ten texťák vlastně obsahuje. Teď nám jde totiž jen o to, jak jej strojově průběžně stahovat a ukládat do kořenového adresáře našeho repozitáře na GitHubu.

Stahujeme počasí do svého GitHubu

Použijeme k tomu právě Actions, jejichž odkaz najdeme v liště repozitáře. V sekci Actions klepneme na tlačítko New workflow a vložíme do něj tento kód:

name: Automaticke stahovani dat z NOAA

on:
  push:
  workflow_dispatch:
  schedule:
    - cron: '*/5 * * * *'

jobs:
  scheduled:
    runs-on: ubuntu-latest
    steps:
    - name: Propojeni s repozitarem
      uses: actions/checkout@v2
    - name: Stahni METAR zpravu z NOAA
      run: |-
        wget -q -O brno.txt https://tgftp.nws.noaa.gov/data/observations/metar/stations/LKTB.TXT
    - name: Uloz zpravu do repozitare
      run: |-
        git config user.name "Automated"
        git config user.email "actions@users.noreply.github.com"
        git add -A
        timestamp=$(date -u)
        git commit -m "Posledni data: ${timestamp}" || exit 0
        git push

Jedná se o formát strukturovaných dat YAML, ve kterém je uložené, co tato úloha bude dělat. Její součástí nejsou žádné osobní identifikátory, takže je kód opravdu univerzální, zcela přenositelný a bude fungovat i vám.

Klepněte pro větší obrázekKlepněte pro větší obrázek
Sekce Actions v repozitáři na GitHubu a tlačítko New workflow pro vytvoření nové úlohy. Právě ta nám bude stahovat tyto textové soubory.

GitHub bude spouštět skript třeba každých pět minut

Pro nás je podstatná hned úvodní část uvozená výrazy schedule a cron, kde GitHubu sdělujeme, že budeme úlohu časově plánovat pomocí standardní linuxové služby cron. Cron k nastavení periodického opakování používá speciální zápis, který zná každý linuxový správce, pomůže vám ale i webový generátor Cron.guru.

Klepněte pro větší obrázek
Pokud nerozumíte časovému formátu služby cron, pomůže generátor na webu crontab.guru

V našem případě se jedná o zápis */5 * * * *, kterým cronu sdělujeme, aby úlohu spouštěl každých pět minut. V zápisu totiž po sobě jdou minuty, hodiny, dny v měsíci, měsíce a dny v týdnu. Hvězdička představuje jakoukoliv hodnotu.

Samotný obsah úlohy je v sekci jobs. Spustí se na linuxovém Ubuntu a nebojte se, nemusíte jej mít, použijeme totiž to virtuální přímo od GitHubu, které je v ceně i u bezplatných účtů. Prvně provedeme propojení úlohy s naším repozitářem a potom, protože už jsme v tom Linuxu, můžeme spustit libovolný linuxový příkaz.

Klepněte pro větší obrázek
Soubor stáhneme třeba pomocí prográmku wget, který je součástí většiny linuxových systémů. Ubuntu od GitHubu není výjimkou.

V našem případě to bude stažení textového souboru se zprávou METAR do souboru brno.txt a pomocí programu wget. V závěru stažený souboru uložíme do našeho repozitáře s komentářem, který bude obsahovat časový údaj.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
A je hotovo, úlohu stačí uložit, GitHub ji za chvíli spustí, no a pak ji bude opakovat stále dokola každých pět minut. Samozřejmě se můžeme podívat na detaily zpracovávání úlohy.

A to je celé, soubor by se měl záhy objevit v kořenovém adresáři. Když bychom nyní pomocí GitHub Pages přistupovali k našim souborům, v Javascriptu můžeme soubor načíst a zpracovat. Budeme mít k dispozici pokaždé jeho nejnovější verzi.

Téměř živé výsledky prezidentských voleb skrze GitHub dělají to samé.

Diskuze (1) Další článek: PlayStation 5 si pomocí interního SSD zatím nerozšíříte. Sony možnost aktivuje později

Témata článku: Programování, Linux, Pojďme programovat elektroniku, GitHub, Brno, Ubuntu, Soubor, METAR, Cron, Formát, Donald Trump, NAM system, Biden, Textový soubor, Úloha, Volby, Actions

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5