IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Google Apps Scripty - Kalendár

V tomto tutoriále vám ukážem jedno z možných využití Google Apps scriptov. Myslím si, že to sú jednoduché a pre programátorov dobré hračky, ale aj nástroje. Pomocou Apps Script môžete komunikovať s Google produktmi. Môžete ich využiť v Google formulároch, office a webových aplikáciách.

Začíname

Apps script

Začnime vytvorenie Google Apps scriptu.

1. Vytvorenie Apps Script na Google drive

V Google drive kliknite na vytvoriť, script a potom prázdny projekt.

2. Vloženie scriptu

V editore zmažte všetko predpripravené a vložte tam tento script:

function Synchronizace() {
   function esc(str) {
     return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
   }
   var now = new Date();//Dnešní datum
   var start = new Date(now.getTime() - (14 * 24 * 60 * 60 * 1000));//Od kdy se budou načítat eventy -14 dní
   var end = new Date(now.getTime() + (31 * 24 * 60 * 60 * 1000));//Do kdy se budou načítat eventy +31 dní
   var events = CalendarApp.getDefaultCalendar().getEvents(start, end);//Získání všech eventů z defaultního kalendáře

   var url = "http://apps.filippyrek.cz";//Adresa na kterou se informace odešlou
   var payload = "{"//Tato proměnná se odešle
   var f = 0;//Pomocná proměnná (f=first)
   var i = 0;//Pomocná proměnná
   for(var c = 0;c<events.length;c++){//Prověření každého eventu a přidání do proměnné
     var reg = new RegExp(/sk-(.*)/i);//Ověření pokud má event na začátku "sk-" (Nikdo nemusí věkdět kdy půjdu k holiči)
     if(reg.test(events[c].getTitle())){
       if(f==1)//Pokud toto není první event
         payload = payload + ",";
       else
         f=1;
       var d = new Date(events[c].getStartTime());
       var sd = d.getDate()+"."+ (d.getMonth()+1) +"."+d.getFullYear();
       payload = payload + "\""+i+"\":{\"date\":\""+sd+"\", \"name\":\""+esc(events[c].getTitle().replace(/sk-/gi, ""))+"\"}";//Poskládání JSONu (toto si nastavte jak chcete, klidně užijte další informace z http://bit.ly/19bzANL)
       i++;
       Logger.log("Odeslána událost na "+sd+" s návem "+events[c].getTitle().replace(/sk-/gi, ""));
     }
   }
  payload = payload + "}";
  var hpayl = {//Data se odešlou jako "data", $_POST["data"]
    "data":payload
  }
  var options = { "method":"POST",//Metoda
                   "payload" : hpayl
                 };
  UrlFetchApp.fetch(url, options);//Odeslání
}

Tento script zaistí to, že sa sa nám z defaultného kalendára načítajú všetky eventy za posledných 14 dní a nadchádzajúcich 31 dní. Potom sa skontroluje či majú na začiatku "SK-". Toto sa hodí ak si do kalendára vkladáte aj veci, ktoré sa nemusia exportovať. Napr. kedy idete k holičovi atp. Pokiaľ ale o toto nestojíte, tak to pokojne zmažte.

Teraz stačí projekt uložiť (Ctrl + S).

3. Nastavenie časovanie

V hornom paneli, kde máte späť, vpred, uloženie, je aj nastavenie časovania. Sú to také hodiny v bubline.

Potom, čo na ne kliknete, sa vám zobrazí okno, v ktorom kliknete na "Neboli nastavené žiadne spúšťače. Ak chcete teraz pridať spúšťač, kliknite sem".

Tu zo za funkciu zvolíte "Synchronizácia" a potom časovanie aké chcete. Ja som použil spúšťanie každých 6 hodín.

Databázy - MySQL

1. Tvorba tabuľky

Nasledujúci SQL kód založí potrebné databázové tabuľky.

CREATE TABLE IF NOT EXISTS `calendar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  `name` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ;

Php

Prijaté dáta od skriptu spracujeme v PHP.

1. Príjem dát

$dsn = 'mysql:dbname=db_name;host=host_name;charset=utf8';
$user = 'user_name';
$password = 'password';
try {
    $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Nepodařilo se propojit s databází';
}
if(isset($_POST["data"])){
    $js = json_decode($_POST["data"], TRUE);
    $sql = "DELETE FROM calendar";//Vyčištění tabulky od minulého zápisu, aby se smazání eventů v google kalendáři projevilo i zde, ...
    $d = $db->prepare($sql);
    $d->execute();
    for($c=0;$c<count($js);$c++){//Vložení do každého eventu do db
        $sql = "INSERT INTO `calendar`(`id`, `date`, `name`) VALUES (NULL,".$db->quote(htmlspecialchars($js[$c]['date'])).",".$db->quote(htmlspecialchars($js[$c]['name'])).")";
        $d = $db->prepare($sql);
        $d->execute();
    }
}

Keďže sa dáta odošlú v JSON, tak si ich pomocou PHP funkcie json_decode spracujeme. Potom sa vymaže celá tabuľka, aby sa zabezpečila 100% Preberanie Google kalendárom. Potom už sa len vloží novo získané dáta.

2. Zobrazenie

Keďže som sa zúčastnil súťaže Machr na PHP - kalendár, tak som tu použil svoj výtvor, ktorý som ešte ľahko vylepšil.

<?php
$events = array();
$sql = "SELECT * FROM `calendar`";
$d = $db->prepare($sql);
$d->execute();
$res = $d->fetchAll();
for($c=0;$c<count($res);$c++){
    $events[$c]=array("date" => $res[$c]["date"], "name" => $res[$c]["name"]);
}
require ("Calendar.php");
if(isset($_GET["m"]) && isset($_GET["y"])){
    $m = $_GET["m"];
    $y = $_GET["y"];
}
else{
    $m = date("n");
    $y = date("Y");
}
$pm = Calendar::prevMonth($m, $y);
$nm = Calendar::nextMonth($m, $y);
$a = new Calendar($m, $y, array("events" => $events,
                "JScallback" => "CEvent",
                "calendarID" => "cal1",
                 "prevMonth" => "<a href=\"?m=" . $pm["month"] . "&y=" . $pm["year"] . "\">&lt;</a>",
                 "nextMonth" => "<a href=\"?m=" . $nm["month"] . "&y=" . $nm["year"] . "\">&gt;</a>"));
$a -> vykresli();?>
<div id="ev">
    <div id="eva">
        <p id="evd"></p>
        <p id="evn"></p>
    </div>
</div>

<div id="tomorrow">
<h4>Zítřejší události:</h4>
<?php
$c=0;
for($i=0;$i<count($res);$i++){
    if($res[$i]["date"]==date("j")+1 .date(".n.Y")){
        echo "<p>".$res[$i]["name"]."</p>";
        $c++;
    }
}
if($c==0)
echo "<p>Zítra se nic neděje.</p>";
?>

K tomuto ešte samozrejme patrí JavaScript, ktorý tu ale vysvetľovať nebudem, pretože tam ide iba o dizajn.

Záver

Výsledný kalendár si môžete nastylovať ako chcete, využite k tomu priložený štýl. To isté platí aj pre javascript.

Google Apps Scripty sú naozaj dobré hračky! Môžete s tým vytvoriť malinké ulitky pre svoju potrebu, ale aj dobré aplikácie.

Ak váš Google Apps scripty zaujali tak si rozhodne preštudujte https://developers.google.com/apps-script/

.<> Ukážka kalendára - Google API

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 321x (5.28 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript

 

Všetky články v sekcii
Google API
Preskočiť článok
(neodporúčame)
Úvod do Google Apps Script
Článok pre vás napísal Filip Pýrek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Student at SPŠ Purkyňova Brno (CZE), ENTJ (personality type), SW developer
Aktivity