2. Mashup [MI-W20 Web 2.0]
https://edux.fit.cvut.cz/courses/MI-W20/tutorials/02/start
2. Mashup Google Apps Script Základní zdroje http://code.google.com/googleapps/appsscript/ [http://code.google.com/googleapps/appsscript/] http://code.google.com/intl/cs/googleapps/appsscript/articles.html [http://code.google.com/intl/cs/googleapps/appsscript/articles.html] http://code.google.com/intl/cs/googleapps/appsscript/templates.html [http://code.google.com/intl/cs/googleapps/appsscript/templates.html] http://code.google.com/intl/cs/googleapps/appsscript/allservices.html [http://code.google.com/intl/cs/googleapps/appsscript/allservices.html]
Vytvoření dokumentu/skriptu 1. V Google Docs [http://docs.google.com/] vytvořte novou tabulku (spreadsheet) I. Pro práci se skripty je dokument potřeba uložit a tedy i pojmenovat 2. Otevření editoru skriptů I. V menu dokumentu: Nástroje → Skripty → Editor skriptů II. Pro uložení a následné spuštění skriptu je potřeba skript pojmenovat (V rámci jednoho dokumentu může být více sktiptů) 3. Lze importovat již hotové skripty nebo použít celý dokument včetně skriptů jako šablonu I. V menu dokumentu: Nástroje → Skripty → Vložit → Stock Price nebo: Vložit → Skript II. Šablony [https://docs.google.com/templates]
Základy Pro psaní skriptů je použit JavaScript.
Jednoduchý skript zobrazující dialogové okno function helloWorld() { Browser.msgBox("Hello, World"); }
Spuštění skriptu:
Spustit → helloWorld tlačítko „spustit“ vytvořením objektu a přiřazením skriptu V menu dokumentu: Vložit → Kresba nakreslit „tlačítko“ Menu hotové kresby: Kresba → Přiřadit skript. Vložit název fce ke spuštění pomocí událostí: viz dále Debugger tlačítko „Ladit“ breakpoint, krokování …
Rozšíření Jednoduchý dialog pro získání údaje function showDialog(){ var name = Browser.inputBox("ID Check", "Enter your name", Browser.Buttons.OK_CANCEL); }
Posílání mailu odesílatem je email Vašeho účtu. existují omezení na počet odeslaných mailů.
MailApp.getRemainingDailyQuota() function sendMail(){ MailApp.sendEmail("
[email protected]", "Hello world!", "Sent from Apps Script"); }
Log function logMessage(){ Logger.log("Hello world!"); }
Zobrazení logu:
Editor skriptů → Zobrazit protokoly Logger.getLog()
Události
1z5
22.11.11 12:42
2. Mashup [MI-W20 Web 2.0]
https://edux.fit.cvut.cz/courses/MI-W20/tutorials/02/start
onOpen() onEdit(event) onInstall() onFormSubmit(e) Časové spouštěče
Editor skriptů → Spouštěče → Spouštěče aktuálního skriptu function onOpen() { Browser.msgBox(Session.getActiveUser().getEmail()); } function onEdit(event) { var ss = event.source.getActiveSheet(); var r = event.source.getActiveRange(); r.setComment("Last modified: " + (new Date())); } // Assume the form has 2 fields (name and age) function onFormSubmit(e) { var timestamp = e.values[0]; var name = e.values[1]; var age = e.values[2]; // namedValues are only available for submitters who are Apps users and // for forms that require users to signin before submitting the form. var submitter = e.namedValues["Username"]; MailApp.sendEmail("email_username", "form submitted", name + ", age " + age + " submitted by " + submitter + " on " + timestamp + ". "); }
Vytvoření menu // po otevření dokumentu jsou přidány položky menu do aktuálního Spreadsheet function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // položky menu a funkce, které se zavolají po kliknutí na položku menu var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"}, {name: "Surprise 2", functionName: "menuItem2"} ]; ss.addMenu("Surprises", menuEntries); } function menuItem1() { Browser.msgBox("You clicked Surprise 1 on the menu!"); } function menuItem2() { Browser.msgBox("Surprise! Surprise!") }
Uživatelské rozhraní tlačítka přepínače textová pole popisky seznamy dialogová okna panely … function gui() { var doc = SpreadsheetApp.getActiveSpreadsheet(); var app = UiApp.createApplication(); var textbox = app.createTextBox().setName('textBox'); var button = app.createButton('submit'); app.add(textbox); app.add(button); var handler = app.createServerClickHandler('process'); handler.addCallbackElement(textbox); button.addClickHandler(handler); doc.show(app); } function process(e) { var doc = SpreadsheetApp.getActiveSpreadsheet(); var cell = doc.getRange('a1'); cell.setValue(e.parameter.textBox); var app = UiApp.getActiveApplication(); app.close(); // The following line is REQUIRED for the widget to actually close. return app; }
Zápis do buňky function example() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var myValue = Browser.inputBox("Enter a number"); sheet.getRange("A1").setValue("Number entered:"); var b1Range = sheet.getRange("B1"); b1Range.setValue(myValue); var valueToShow = b1Range.getValue() + 1; Browser.msgBox("The value you entered plus one is: " + valueToShow); }
Práce s SpreadSheet function getSheetByName(name){
2z5
22.11.11 12:42
2. Mashup [MI-W20 Web 2.0]
https://edux.fit.cvut.cz/courses/MI-W20/tutorials/02/start
var ss = SpreadsheetApp.getActiveSpreadsheet(); var data = ss.getSheetByName(name); // if not exists create if(data==null){ ss.insertSheet(name, 1); } return ss.getSheetByName(name); } // Function that records the values in the Spreadsheet function saveData(e) { var d = SpreadsheetApp.getActiveSpreadsheet(); var doc = d.getSheetByName("Data"); var lastRow = doc.getLastRow(); // Determine the last row in the Spreadsheet that contains any values var cell = doc.getRange('a1').offset(lastRow, 0); // determine the next free cell in column A cell.setValue(e.parameter.date); cell.offset(0, 1).setValue(e.parameter.name); // Set the value of the adjacent cell cell.offset(0, 2).setValue(e.parameter.price); // set the value of the next cell cell.offset(0, 3).setValue(e.parameter.category); // set the value of the next // Clean up - get the UiApp object, close it, and return var app = UiApp.getActiveApplication(); app.close(); // The following line is REQUIRED for the widget to actually close. return app; } function getDataBySheet(name){ var ss = SpreadsheetApp.getActiveSpreadsheet(); // get shhet by name var sheet = ss.getSheetByName(name); // get last row var lastRow = sheet.getLastRow(); var i=0; // start position var cell = sheet.getRange('a1'); // associative array to store data var data=new Array(); // iterate all data for (i=0;i
Url Fetch function requestUrl(url) { var response = UrlFetchApp.fetch(url); return response.getContentText() }
XML parser // // // // // // // //
This script makes use of the Oracle of Bacon, a very cool site at http://oracleofbacon.org. Takes two arguments: names of actors. The second is optional, and defaults to "Kevin Bacon" if unspecified. Example usage in a spreadsheet: =kb("Miley Cyrus", "Arnold Schwarzenegger")
function kb(from, to) { if (!to) { to = "Kevin Bacon"; } var parameters = { method : "post", payload : "a=" + encodeURIComponent(from) + "&b=" + encodeURIComponent(to) + "&u=1" + // movies only. Use "3" to include TV "&p=" + encodeURIComponent('google-apps') }; var text = UrlFetchApp.fetch("http://oracleofbacon.org/cgi-bin/xml", parameters).getContentText(); return parse(text); } function testBacon() { var result = kb("Miley Cyrus", "arnold schwarzenegger"); Logger.log(result); } function parse(txt) { var doc = Xml.parse(txt, true); var attr = doc.spellcheck; if (attr) { return "Cannot find actor: " + attr.name; } var actors = doc.html.head.getElements("actor"); var movies = doc.html.head.getElements("movie"); if (!actors || actors.length ==0) { return "no match found"; } var movieIndex = 0; var r = ''; var firstPerson = true; for (var i in actors) { r = r + actors[i].getText(); if (movies[movieIndex]) { r = r + (firstPerson ? "" : " who") + " was in " + movies[movieIndex].getText() + " with "; } movieIndex++; firstPerson = false; } return r; }
Soap service
3z5
22.11.11 12:42
2. Mashup [MI-W20 Web 2.0]
https://edux.fit.cvut.cz/courses/MI-W20/tutorials/02/start
function determineCountryFromIP(ipAddress) { var wsdl = SoapService.wsdl("http://www.webservicex.net/geoipservice.asmx?wsdl"); var geoService = wsdl.getGeoIPService(); var param = Xml.element("GetGeoIP", [ Xml.attribute("xmlns", "http://www.webservicex.net"), Xml.element("IPAddress", [ ipAddress ]) ]); var result = geoService.GetGeoIP(param); return result.Envelope.Body.GetGeoIPResponse.GetGeoIPResult.CountryCode.Text; }
Map Zobrazení bodů na statické mapě function testMap(){ var imageUrl = getMap("Prague","Vienna"); var sheet = SpreadsheetApp.getActiveSheet(); sheet.insertImage(imageUrl, 3, 3); } function getMap (place1, place2) { var map = Maps.newStaticMap().setSize(500, 350); map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, "red", null); map.addMarker(place1); map.addMarker(place2); return map.getMapUrl(); }
Úkoly 1. Vytvořte nový dokument (tabulku) 2. Vytvořte menu s názvem „Ukázka“ menu bude mít 2 položky: „Zadat číselný údaj“, „Zadat text“, „Zadat město“, „Proveď úkoly“ 3. Po kliknutí na „Zadat číselný údaj“ se zobrazí dialogové okno pro zadání údaje Tento údaj se zapíše do buňky A1 a A4 4. Po kliknutí na „Zadat text“ se zobrazí dialogové okno pro zadání textu Tento údaj se zapíše do buňky A2 5. Po kliknutí na „Zadat město“ se zobrazí dialogové okno pro zadání města Tento údaj se zapíše do buňky A3 6. Po kliknutí na „Proveď úkoly“ se provedou úkoly dle následujícího zadání: I. Převeďte číslo v buňce A1 z CZK na EUR (ručně zapište vzorec a kurz) a zapište do buňky B1 II. Přeložte text v buňce A2 z češtiny do angličtiny III. Zobrazte město z buňky A3 na mapě IV. Zjistěte aktuální kurz online a převeďte číslo z A4 z CZK na EUR, výsledek zapište do B4 a. můžete použít http://www.google.com/ig/calculator?hl=en&q=1CZK=?EUR [http://www.google.com/ig/calculator?hl=en&q=1CZK=?EUR] b. výsledkem není JSON, ale pole. Lze ho použít např. takto: // získaný text var text = ... var dat; eval("dat = " + text + ";");
Bonus úkol: Vytvořte v novém dokumentu/listu GUI obsahující 2 textové pole do prvního textového pole zadejte seznam požadovaných ingrediencí pro recept oddělených čárkou, např. onions,garlic druhé textového pole bude obsahovat název jídla, např. pizza po odeslání formuláře zpracujte údaje z API Recipe Puppy [http://www.recipepuppy.com/about/api/] zapište do tabulky název receptu a url
Pipes Základní zdroje http://pipes.yahoo.com/pipes/ [http://pipes.yahoo.com/pipes/] http://pipes.yahoo.com/pipes/pipes.popular [http://pipes.yahoo.com/pipes/pipes.popular]
Základy Dostupné moduly Sources - Most Pipes begin with a data source. These modules grab data from somewhere on the internet and bring it into your Pipe for processing. User Inputs - These modules let you define parameters for your Pipe. These inputs can be fed into other modules in your Pipe. Operators - These modules transform and filter data flowing through your Pipe. URL - This module manipulates URLs. String - These modules help manipulate and combine text strings. Date - These modules define and format dates. Location - These modules help convert text strings to geographic locations. Number - This module provides basic arithmetic operations.
4z5
22.11.11 12:42
2. Mashup [MI-W20 Web 2.0]
https://edux.fit.cvut.cz/courses/MI-W20/tutorials/02/start
Deprecated - These modules will continue to work however, we're discouraging their use because we've introduced new modules with improved functionality.
Jednoduchá agregace feedů
Kombinace zdrojů
Úkoly 1. Přihlašte se do Pipes 2. Vytvořte pipe, která bude kombinovat několik zdrojů (např. BBC, CNN) a bude filtrovat záznamy na základě uživatelem zadaného textu. Tento text může být obsažen jak v popisu tak v názvu. 3. Vytvoře pipe, která načte automobily nebo produkty (např. Google Base) dle zadaného klíčového slova a ke každému z nich dodá obrázek z flickr
/mnt/www/courses/MI-W20/data/pages/tutorials/02/start.txt · Poslední úprava: 2011/03/10 20:49 autor: kuchajar
5z5
22.11.11 12:42