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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); } 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"] . "\"><</a>", "nextMonth" => "<a href=\"?m=" . $nm["month"] . "&y=" . $nm["year"] . "\">></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/
.<>
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 323x (5.28 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript