{"id":4786,"date":"2021-08-12T01:24:39","date_gmt":"2021-08-11T23:24:39","guid":{"rendered":"https:\/\/tecnocentres.org\/?p=4786"},"modified":"2021-08-12T01:39:46","modified_gmt":"2021-08-11T23:39:46","slug":"utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte","status":"publish","type":"post","link":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/","title":{"rendered":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte)"},"content":{"rendered":"<p style=\"text-align: justify;\">Con este art\u00edculo, acabo la trilog\u00eda sobre web apps con Google apps script. En el <a href=\"https:\/\/tecnocentres.org\/es\/utilizar-gas-para-crear-aplicaciones-web-1a-parte\/\" target=\"_blank\" rel=\"noopener\">primer art\u00edculo<\/a> vimos qu\u00e9 eran y qu\u00e9 pod\u00edamos desarrollar. En <a href=\"https:\/\/tecnocentres.org\/es\/utilizar-gas-para-crear-aplicaciones-web-2a-parte\/\" target=\"_blank\" rel=\"noopener\">el segundo<\/a>, vimos el proceso de creaci\u00f3n de una web app concreta. En este tercero, veremos c\u00f3mo podemos hacer una web app que tenga varias p\u00e1ginas html.<\/p>\n<p style=\"text-align: justify;\">Como dec\u00edamos en el segundo art\u00edculo, solo la funci\u00f3n doGet puede devolver html. De hecho, cuando se accede a la URL de la aplicaci\u00f3n, se ejecuta la funci\u00f3n doGet que es la que devuelve el html. Este html suele tener alg\u00fan bot\u00f3n que llama a otra funci\u00f3n que es la que guarda datos o provoca acciones. \u00bfPero y si queremos que la aplicaci\u00f3n tenga m\u00e1s de una pantalla? \u00bfC\u00f3mo lo hacemos con una sola funci\u00f3n doGet?<\/p>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">Seguiremos con el ejemplo del segundo art\u00edculo, donde cre\u00e1bamos un formulario KPSI que los alumnos contestaban al inicio de una unidad y en terminarla. Supongamos que la misma aplicaci\u00f3n nos debe servir para contestar 3 formularios KPSI correspondientes a 3 unidades diferentes. \u00bfC\u00f3mo lo podr\u00edamos hacer? (Se puede encontrar el script final en <a href=\"https:\/\/script.google.com\/home\/projects\/1giA1ibQjSq-184cfAR8OrnH9SmyIBMRQqzr4nNIrsE-wloo_Zr5ndJPK\/edit\" target=\"_blank\" rel=\"noopener\">este enlace<\/a>)<\/p>\n<p style=\"text-align: justify;\">Lo l\u00f3gico es que la aplicaci\u00f3n tuviera 3 botones, uno para cada unidad. Seg\u00fan en el bot\u00f3n que el alumno haga clic, deber\u00eda ver y rellenar un cuestionario KPSI u otro.<\/p>\n<p>Para ello, utilizaremos el par\u00e1metro de la funci\u00f3n doGet (e). Esta e contiene los par\u00e1metros que se pasan con la URL. Por ejemplo, si la direcci\u00f3n de la implementaci\u00f3n de la funci\u00f3n es https:\/\/script.google.com\/a\/macros\/s\/AKbgx7vR1t\/exec, si llamamos a la funci\u00f3n con la siguiente URL https:\/\/script.google. como\/a\/macros\/s\/AKbgx7vR1t\/ejec<strong>?p=1<\/strong> podremos recuperar el valor de p a trav\u00e9s del par\u00e1metro y de la funci\u00f3n doGet (e).<\/p>\n<p>En la funci\u00f3n doGet, le a\u00f1adimos el c\u00f3digo para recoger el par\u00e1metro:<\/p>\n<pre>function doGet(e) {\r\n \/\/Recogemos los par\u00e1metros (pantalla)\r\n let params= e.parameter;\r\n let pantalla=params.p;\r\n\r\n(...)\r\n\r\n}<\/pre>\n<p style=\"text-align: justify;\">De este modo, podemos decidir qu\u00e9 pantalla se muestra con esta funci\u00f3n. A\u00f1adiendo la expresi\u00f3n switch, ya podemos hacer que se muestre una p\u00e1gina html u otra. Recogemos el par\u00e1metro, nos aseguramos de que el alumno est\u00e1 en la lista, y mostramos la pantalla html que corresponde seg\u00fan el par\u00e1metro enviado a trav\u00e9s de la URL (si no env\u00eda ning\u00fan par\u00e1metro, le asignaremos la pantalla 1).<\/p>\n<div>\n<pre>function doGet(e) {\r\n \u00a0\/\/Recogemos\u00a0los\u00a0par\u00e1metros\u00a0(pantalla)\u00a0\r\n \u00a0let\u00a0params=\u00a0e.parameter;\u00a0\r\n \u00a0let\u00a0pantalla=params.p;\u00a0\r\n \u00a0if\u00a0(pantalla==undefined)\u00a0{\u00a0pantalla=1\u00a0};\u00a0\/\/Si\u00a0la\u00a0llamada\u00a0a\u00a0la\u00a0aplicaci\u00f3n\u00a0no\u00a0tiene\u00a0ning\u00fan\u00a0par\u00e0metre\u00a0p,\u00a0le\u00a0asignamos\u00a0la\u00a0primera\u00a0pantalla\u00a0\r\n \u00a0\/\/Comprobamos\u00a0si\u00a0el\u00a0usuario\u00a0est\u00e1\u00a0en\u00a0la\u00a0lista\u00a0de\u00a0alumnos\r\n \u00a0var\u00a0spreadsheet\u00a0=\u00a0SpreadsheetApp.openByUrl(full_control);\u00a0\u00a0\r\n \u00a0var\u00a0sheet\u00a0=\u00a0spreadsheet.getSheetByName(full);\r\n \u00a0var\u00a0rang\u00a0=\u00a0sheet.getDataRange();\r\n \u00a0var\u00a0alumnes\u00a0=\u00a0rang.getValues();\r\n \u00a0var\u00a0numRows\u00a0=\u00a0rang.getNumRows();\r\n \u00a0let\u00a0identificacio=0;\r\n \u00a0for\u00a0(let\u00a0i=1;i&lt;numRows;i++){\r\n \u00a0\u00a0\u00a0if\u00a0(alumnes[i][1]==usuari){\r\n \u00a0\u00a0\u00a0\u00a0\u00a0identificacio=1;\r\n \u00a0\u00a0\u00a0}\r\n \u00a0}\r\n \u00a0\/\/Si\u00a0el\u00a0alumno\u00a0no\u00a0est\u00e1\u00a0en\u00a0la\u00a0llista,\u00a0se\u00a0indica\u00a0con\u00a0un\u00a0mensaje\u00a0emergente\r\n \u00a0if\u00a0(identificacio==0){\r\n \u00a0\u00a0\u00a0return\u00a0HtmlService.createHtmlOutputFromFile('html_no_autoritzado').setTitle(\"Aplicaci\u00f3n\u00a0KPSI\")\r\n \u00a0}else{\r\n \u00a0\u00a0\u00a0switch\u00a0(pantalla)\u00a0{\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0case\u00a01:\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla=HtmlService.createTemplateFromFile('KPSI');\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.usuari=usuari;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.alumnes=alumnes;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.apli=apli;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0plantilla.evaluate().setTitle(\"Aplicaci\u00f3n\u00a0KPSI\")\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0case\u00a02:\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla=HtmlService.createTemplateFromFile('KPSI2');\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.usuari=usuari;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.alumnes=alumnes;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.apli=apli;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0plantilla.evaluate().setTitle(\"Aplicaci\u00f3n\u00a0KPSI\")\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0case\u00a03:\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla=HtmlService.createTemplateFromFile('KPSI3');\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.usuari=usuari;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.alumnes=alumnes;\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0plantilla.apli=apli;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0plantilla.evaluate().setTitle(\"Aplicaci\u00f3n\u00a0KPSI\")\u00a0\r\n \u00a0\u00a0\u00a0}\u00a0\r\n \u00a0}\r\n}<\/pre>\n<\/div>\n<p>Si creamos las p\u00e1ginas KPSI2.html y KPSI3.html, la misma aplicaci\u00f3n ya carga una u otra seg\u00fan el par\u00e1metro de la URL.<\/p>\n<p style=\"text-align: justify;\">Nos falta pero, a\u00f1adir los botones en las p\u00e1ginas KPSI, KPSI2 y KPSI3. Lo haremos solo por la KPSI, ya que en las dem\u00e1s ser\u00e1 igual. La idea es hacer que, al hacer clic, se abra la URL de la aplicaci\u00f3n con el par\u00e1metro correspondiente. Antes de ir a la p\u00e1gina KPSI, en el c\u00f3digo, habr\u00e1 que encontrar esta direcci\u00f3n de la aplicaci\u00f3n y pasarla como par\u00e1metro.<\/p>\n<p>Por lo tanto, como constante en el c\u00f3digo, a\u00f1adiremos.<\/p>\n<div>\n<pre>\/\/Comentar en publicar la versi\u00f3n. Eliminar comentar para las pruebas\r\nconst apli=\"https:\/\/script.google.com\/a\/macros\/s\/AKfycbzEpglhjqn8FKi6DXjJydP8CB6wFvszyFqb05czYUc\/dev\";\r\n\r\n\/\/Comentar cuando se realizan pruebas y no se publica. Eliminar comentar para publicar.\r\n\/\/const\u00a0apli=ScriptApp.getService().getUrl();<\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Como se puede ver, definimos dos direcciones. Una para las pruebas, que la direcci\u00f3n termina en \/ dev y otra para las implementaciones finales, que la cogemos autom\u00e1ticamente con el getUrl del ScriptApp. Mientras estemos trabajando con la implementaci\u00f3n de pruebas, comentaremos la l\u00ednea de ScriptApp. Cuando ya creamos la implementaci\u00f3n por los alumnos, comentaremos la l\u00ednea de la direcci\u00f3n \/ dev.<\/p>\n<p>Ahora ya s\u00ed, pasamos tambi\u00e9n esta variable apli como par\u00e1metro y vamos a la p\u00e1gina KPSI.<\/p>\n<p>Vemos como quedar\u00eda en la p\u00e1gina KPSI. Tras la cabecera y antes de los alumnos, a\u00f1adir\u00edamos:<\/p>\n<pre>&lt;ul class=\"nav\"&gt;\r\n &lt;li class=\"nav-item\"&gt;\r\n   &lt;a class=\"nav-link active\" onclick=\"saltar(1,&lt;?=apli ?&gt;)\" href=\"javascript:;\"&gt;Unitat 1&lt;\/a&gt;\r\n &lt;\/li&gt;\r\n &lt;li class=\"nav-item\"&gt;\r\n   &lt;a class=\"nav-link\" onclick=\"saltar(2,&lt;?=apli ?&gt;)\" href=\"javascript:;\"&gt;Unitat 2&lt;\/a&gt;\r\n &lt;\/li&gt;\r\n &lt;li class=\"nav-item\"&gt;\r\n  &lt;a class=\"nav-link\" onclick=\"saltar(3,&lt;?=apli ?&gt;)\" href=\"javascript:;\"&gt;Unitat 3&lt;\/a&gt;\r\n &lt;\/li&gt;\r\n&lt;\/ul&gt;<\/pre>\n<p>Vemos que a la aplicaci\u00f3n le aparecen las tres unidades para elegir (en este caso, con la unidad 1 marcada como activa).<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4780\" src=\"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3.png\" alt=\"\" width=\"908\" height=\"402\" srcset=\"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3.png 1677w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-300x133.png 300w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-1024x454.png 1024w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-768x340.png 768w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-1536x681.png 1536w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-1040x461.png 1040w, https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/1-3-640x284.png 640w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/p>\n<p>Ya solo nos falta definir en esta p\u00e1gina KPSI la funci\u00f3n saltar (), que es la que construir\u00e1 la direcci\u00f3n de la aplicaci\u00f3n con el par\u00e1metro correspondiente.<\/p>\n<div>\n<pre>function saltar(p, apli){\r\n \u00a0if (document.KPSI.btn_desar.disabled==false){ \/\/Si el bot\u00f3n est\u00e1 desactivado es porque ha realizado cambios y no ha guardado\r\n \u00a0\u00a0\u00a0let resposta=window.confirm(\"Has hecho cambios y no has guardado. \u00bfHas olvidado guardar los cambios? Pulsa Aceptar para volver a la p\u00e1gina y poder guardar o Cancelar para salir sin guardar\");\r\n \u00a0\u00a0\u00a0if (resposta==false) {\r\n \u00a0\u00a0\u00a0\u00a0\u00a0window.open(apli+\"?p=\"+p, \"_top\");\r\n \u00a0\u00a0 }\r\n \u00a0}else{\r\n \u00a0\u00a0\u00a0window.open(apli+\"?p=\"+p, \"_top\");\r\n \u00a0}\r\n}<\/pre>\n<\/div>\n<p style=\"text-align: justify;\">Como se ve en el c\u00f3digo, aprovechamos para revisar si se han guardado los cambios. Si se quiere cambiar de pantalla sin guardar, sale un mensaje avisando para que se guarde. En todo caso, se llama a la URL de la aplicaci\u00f3n a\u00f1adiendo el par\u00e1metro p=1 (o 2 o 3, seg\u00fan la Unidad que se ha elegido). De este modo, siempre se vuelve a llamar a la funci\u00f3n doGet que es la que muestra la p\u00e1gina html que queremos.<\/p>\n<p style=\"text-align: justify;\">Reconozco que el sistema no es que sea especialmente c\u00f3modo y hay que estar un poco al tanto de no equivocarse en nada, pero no es demasiado complicado. Adem\u00e1s, tiene un efecto colateral. Si se inserta la aplicaci\u00f3n, no van a funcionar estos saltos. Solo puede funcionar directamente con al URL, sin insertar en ning\u00fan site.<\/p>\n<p>Ahora tendr\u00edamos que crear las p\u00e1ginas KPSI2 y KPSI3 y modificar la funci\u00f3n que llaman para guardar. Definir\u00edamos las funciones guardar2 y guardar3 en el c\u00f3digo y configurar\u00edamos donde queremos guardar los datos de estos otros formularios: en otras pesta\u00f1as de la hoja de c\u00e1lculo o en otros libros de c\u00e1lculos.<\/p>\n<p>Espero que con la serie de los 3 art\u00edculos haya sido capaz de dar las bases para poder crear web apps, recordando siempre la limitaci\u00f3n de 30 usuarios concurrentes.<\/p>\n<p style=\"text-align: justify;\">\u00bfY qu\u00e9 ventaja tiene hacer este procedimiento en lugar de crearte una aplicaci\u00f3n con PHP? B\u00e1sicamente 2. La primera, la facilidad para\u00a0 utilizar las API de Google desde GAS. La segunda, no necesitamos buscar ning\u00fan servidor donde alojar nuestra aplicaci\u00f3n, ya queda operativa desde los servidores de Google.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con este art\u00edculo, acabo la trilog\u00eda sobre web apps con Google apps script. En el primer art\u00edculo vimos qu\u00e9 eran y qu\u00e9 pod\u00edamos desarrollar. En el segundo, vimos el proceso de creaci\u00f3n de una web app concreta. En este tercero,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4680,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[],"class_list":["post-4786","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-google-apps-script-es","post-archive"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres\" \/>\n<meta property=\"og:description\" content=\"Con este art\u00edculo, acabo la trilog\u00eda sobre web apps con Google apps script. En el primer art\u00edculo vimos qu\u00e9 eran y qu\u00e9 pod\u00edamos desarrollar. En el segundo, vimos el proceso de creaci\u00f3n de una web app concreta. En este tercero,...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/\" \/>\n<meta property=\"og:site_name\" content=\"Tecnocentres\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-11T23:24:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-11T23:39:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"748\" \/>\n\t<meta property=\"og:image:height\" content=\"221\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jaume Feliu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jfeliua\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jaume Feliu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/\"},\"author\":{\"name\":\"Jaume Feliu\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/#\\\/schema\\\/person\\\/b2eb569e95072dedf967f0036be08adf\"},\"headline\":\"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte)\",\"datePublished\":\"2021-08-11T23:24:39+00:00\",\"dateModified\":\"2021-08-11T23:39:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/\"},\"wordCount\":990,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tecnocentres.org\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/gas.jpg\",\"articleSection\":[\"Google apps script\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/\",\"url\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/\",\"name\":\"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tecnocentres.org\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/gas.jpg\",\"datePublished\":\"2021-08-11T23:24:39+00:00\",\"dateModified\":\"2021-08-11T23:39:46+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/#\\\/schema\\\/person\\\/b2eb569e95072dedf967f0036be08adf\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#primaryimage\",\"url\":\"https:\\\/\\\/tecnocentres.org\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/gas.jpg\",\"contentUrl\":\"https:\\\/\\\/tecnocentres.org\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/gas.jpg\",\"width\":748,\"height\":221},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/2021\\\/08\\\/12\\\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inici\",\"item\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/\",\"name\":\"Tecnocentres\",\"description\":\"Blog de Jaume Feliu\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/#\\\/schema\\\/person\\\/b2eb569e95072dedf967f0036be08adf\",\"name\":\"Jaume Feliu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g\",\"caption\":\"Jaume Feliu\"},\"sameAs\":[\"https:\\\/\\\/tecnocentres.org\",\"https:\\\/\\\/x.com\\\/jfeliua\"],\"url\":\"https:\\\/\\\/tecnocentres.org\\\/es\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/","og_locale":"es_ES","og_type":"article","og_title":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres","og_description":"Con este art\u00edculo, acabo la trilog\u00eda sobre web apps con Google apps script. En el primer art\u00edculo vimos qu\u00e9 eran y qu\u00e9 pod\u00edamos desarrollar. En el segundo, vimos el proceso de creaci\u00f3n de una web app concreta. En este tercero,...","og_url":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/","og_site_name":"Tecnocentres","article_published_time":"2021-08-11T23:24:39+00:00","article_modified_time":"2021-08-11T23:39:46+00:00","og_image":[{"width":748,"height":221,"url":"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg","type":"image\/jpeg"}],"author":"Jaume Feliu","twitter_card":"summary_large_image","twitter_creator":"@jfeliua","twitter_misc":{"Escrito por":"Jaume Feliu","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#article","isPartOf":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/"},"author":{"name":"Jaume Feliu","@id":"https:\/\/tecnocentres.org\/es\/#\/schema\/person\/b2eb569e95072dedf967f0036be08adf"},"headline":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte)","datePublished":"2021-08-11T23:24:39+00:00","dateModified":"2021-08-11T23:39:46+00:00","mainEntityOfPage":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/"},"wordCount":990,"commentCount":0,"image":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg","articleSection":["Google apps script"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/","url":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/","name":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte) - Tecnocentres","isPartOf":{"@id":"https:\/\/tecnocentres.org\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#primaryimage"},"image":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg","datePublished":"2021-08-11T23:24:39+00:00","dateModified":"2021-08-11T23:39:46+00:00","author":{"@id":"https:\/\/tecnocentres.org\/es\/#\/schema\/person\/b2eb569e95072dedf967f0036be08adf"},"breadcrumb":{"@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#primaryimage","url":"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg","contentUrl":"https:\/\/tecnocentres.org\/wp-content\/uploads\/2021\/08\/gas.jpg","width":748,"height":221},{"@type":"BreadcrumbList","@id":"https:\/\/tecnocentres.org\/es\/blog\/2021\/08\/12\/utilizar-gas-para-crear-aplicaciones-web-3a-y-ultima-parte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inici","item":"https:\/\/tecnocentres.org\/es\/"},{"@type":"ListItem","position":2,"name":"Utilizar GAS para crear aplicaciones web (3\u00aa y \u00faltima parte)"}]},{"@type":"WebSite","@id":"https:\/\/tecnocentres.org\/es\/#website","url":"https:\/\/tecnocentres.org\/es\/","name":"Tecnocentres","description":"Blog de Jaume Feliu","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tecnocentres.org\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/tecnocentres.org\/es\/#\/schema\/person\/b2eb569e95072dedf967f0036be08adf","name":"Jaume Feliu","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/04319ca8610bfe2a04fca8f0d7d42c7e87e4bbe1c687e39a0192f567098d464e?s=96&d=mm&r=g","caption":"Jaume Feliu"},"sameAs":["https:\/\/tecnocentres.org","https:\/\/x.com\/jfeliua"],"url":"https:\/\/tecnocentres.org\/es\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/posts\/4786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/comments?post=4786"}],"version-history":[{"count":0,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/posts\/4786\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/media\/4680"}],"wp:attachment":[{"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/media?parent=4786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/categories?post=4786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tecnocentres.org\/es\/wp-json\/wp\/v2\/tags?post=4786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}