Cómo leer parametros de la URL con Google Apps Script

Hace poco un compañero preguntaba si era posible que un script  de GAS modificara su comportamiento a través de la URL usada. La respuesta es fácil, si, usando parámetros por URL.

Los parámetros se envían al script con ?nombre_param=valor_param al final de la URL

Dentro del código lo único que hemos de hacer es aceptar un parámetro en el doGet(e) y recoger el parámetro con la sintaxis e.parameter.nombre_param.

Con un ejemplo os quedará mucho más sencillo. Me he basado en el ejemplo de una web dinámica para hacer que en función del parámetro que se le pase en la URL use un html u otro.

index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  
    <script>
    function Response(string)
    {
       document.getElementsByName("ejemplo")[0].innerHTML = string;
    }

    function InitWeb()
    {
       google.script.run.withSuccessHandler(Response).Init();
    }
    </script>

  </head>
  <body>
    <h1>
    INDEX
    </h1>

    <script>
        InitWeb();
    </script>

<div name='ejemplo'>
    <p> Loading.... wait</p>
</div>

  </body>
</html>

index2.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    
    <script>
    function Response(string)
    {
       document.getElementsByName("ejemplo")[0].innerHTML = string;
    }
  
    function InitWeb()
    {
       google.script.run.withSuccessHandler(Response).Init();
    }
    </script>

  </head>
  <body>
    <h1>
    INDEX2
    </h1>

    <script>
        InitWeb();
    </script>
  
<div name='ejemplo'>
    <p> Loading.... wait</p>
</div>

  </body>
</html>

Código gs
function Init()
{
  var spreadsheet  = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1NA63mUiiG_ce3crX3PU_ISp8HwuwyKGRslqn2kyEYQM/edit#gid=0");  //Esta ruta será la que tengas a tu fichero que uses como BBDD
  var sheet        = spreadsheet.getActiveSheet();
  var rows         = sheet.getDataRange();
  var numRows      = rows.getNumRows();
  var values       = rows.getValues();
  var string = "";

  for(var i = 0 ; i < numRows ; ++i)
  {
    var row = values[i];
  
    string += "<p>" + row[0] + "</p>";
  
  }

  return string;
}

//Retorna la página principal en función del parámetro param que se le pase en la URL
function doGet(e)
{
   return HtmlService.createHtmlOutputFromFile(e.parameter.param);
 }

Una vez tengáis el código copiado deberéis implementarlo como aplicación web:


La ruta que os salga en la ventana de implementación web será la ruta en la que deberéis añadir vuestro parámetro.

Aquí os dejo los links de como queda:

Cualquier duda ya lo sabéis, espero que os haya gustado.

Nos vemos


3 comentarios:

  1. Saludos, muy interesante tu código, pero creo que se requiere un vídeo, ...no se a que parámetro te refieres para que funcione

    ResponderEliminar
    Respuestas
    1. Hace tiempo que le estoy dando vueltas a hacer un canal para explicar mejor los artículos, lo que nunca tengo el tiempo para ponerme.

      Deberé dar el paso algún dia.... gracias por comentarlo.

      Respecto al parametro tu en una url puedes ponerle parametros a fin de tener una web dinamica.

      Estos parametros se introducen con un simbolo "?" seguido del parametro:

      https://www.tu-url-muy-profesional.com?nombre_param=valor_param

      Espero haberte ayudado.

      Nos vemos

      Eliminar
  2. Hola, hice un script utilizando doGet(e) y funciona perfecto, excepto que a veces me devuelve un mensaje de Google Drive: No se puede abrir el archivo en estos momentos. Comprueba la dirección e inténtalo de nuevo. En pc no me pasó, pero sí en móviles, me pasó teniendo en el celu la misma cuenta con la que lo creé, pero en incógnito abre bien, y le envié el link a otras personas para probar y una de ellas lo abrió bien, pero al dia siguiente le mostró el mismo mensaje. Estoy desorientado porque no encuentro un patrón por donde empezar a buscar, no indica ninún código de error.
    Agradeceré si me podés dar alguna idea.
    La url del script es:
    https://script.google.com/macros/s/AKfycbwxiZuj6w0AFBJI5MmTyinsuTsgDjj35p3_ZOwv6FmmAxEfMQlo6RWJCWR423Ck249Rrw/exec?user=alfredo-pou

    Y también me gustaría saber como manejar el caso de que la url venga sin parámetros.
    Lo que hice fue:
    if (e==undefined){
    var usuario = "default-user";
    }else{
    var usuario = e.parameter['user'];
    }

    Lo cual funciona en depuración, pero no en ejecución

    Gracias de antemano por la ayuda que me puedas brindar!!!

    ResponderEliminar

Tal vez te interese