Captura de recursos de la web

Si necesita administrar recursos en la Web, use los siguientes métodos de UrlFetchApp.

Solicitud GET simple

Úselo fetch(url) si solo necesita obtener un recurso web.

    var response = UrlFetchApp.fetch('https://www.contoso.com');

El fetch(url) método devuelve un objeto HTTResponse , que tiene los métodos para leer la respuesta. Use el getContentText método para leer una respuesta de texto y getContent para leer una respuesta binaria.

Si el cuerpo de la respuesta contiene un objeto JSON, utilícelo getContentText para obtener el objeto JSON. Para acceder a los campos individuales del objeto JSON, use el JSON.parse() método para analizar la respuesta.

    var stock = JSON.parse(response.getContentText());
    Logger.log(`stock symbol: ${stock["symbol"]}`);
    Logger.log(`company: ${stock["companyName"]}`);
    Logger.log(`close price: ${stock["close"]}`);

Control de errores HTTP

Si se produce un error en la solicitud (por ejemplo, con 400 solicitudes incorrectas), el servicio deja de procesar el script y escribe un mensaje de error en el registro. El mensaje incluye el código de estado HTTP de la solicitud, pero no el mensaje de error que podría estar en el cuerpo de la respuesta.

Si necesita obtener el cuerpo de la fetch(url, params) respuesta, llame al método en su lugar y establezca el parámetro muteHttpExceptions en true. Establecer muteHttpExceptions en true siempre devuelve el control al script. A continuación, deberá llamar getResponseCode() al método para determinar si la solicitud se ha realizado correctamente o no y actuar en consecuencia.

    var response = UrlFetchApp.fetch('https://contoso.com', { muteHttpExceptions: true });    

    if (200 == response.getResponseCode())
    {
        Logger.log('HTTP request succeeded');
    }
    else
    {
        Logger.log('HTTP request failed');
    }

Agregar, actualizar o eliminar un recurso web

Si necesita agregar, actualizar o eliminar un recurso web, use el método fetch(url, params). Este método permite especificar el verbo HTTP que se va a usar, el encabezado Content-Type, cualquier otro encabezado que necesite la solicitud y la carga de la solicitud. Para obtener más información sobre estos parámetros, vea el objeto UrlFetchParams .

En el ejemplo siguiente se obtiene un recurso que requiere un token de acceso de OAuth. Dado que GET es el verbo HTTP predeterminado del método fetch, el único parámetro que debe especificar es el headers parámetro.

    var token = "<the oauth token goes here>";
    var response = UrlFetchApp.fetch('https://contoso.com', { headers: { Authorization: `Bearer ${token}` } });    
    var jsonObject = JSON.parse(response.getContentText());    

En este ejemplo se envía una solicitud POST con una carga útil JSON. Dado que la carga es un objeto JSON, en el ejemplo se establece el contentType parámetro application/json.

    var myData = {
        'id' : '123abc',
        'name' : 'leg',
        'color' : 'red'
    };

    var options = {
        'method' : 'post',
        'contentType' : 'application/json',
        'payload' : JSON.stringify(myData)
    };

    var response = UrlFetchApp.fetch('https://contoso.com', options);    
    var jsonObject = JSON.parse(response.getContentText());    

Uso de UrlFetchApp para obtener un archivo de datos o un archivo CSV de OneDrive.

Para obtener un archivo desde OneDrive (https://onedrive.live.com), use Microsoft Graph. El acceso a un archivo de OneDrive requiere un token de acceso OAuth. Y obtener un token de acceso requiere el consentimiento del usuario, a menos que tenga un token de actualización. Pero como Scripts no admite componentes de interfaz de usuario, deberá obtener el consentimiento de otra manera. Si aún no tienes otra forma de obtener un token de actualización, este es un script de PowerShell que puedes ejecutar para obtener el consentimiento y el token de actualización.

$clientId = "your application ID goes here"
 
Start-Process "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=$clientId&scope=files.read offline_access&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf"
 
$code = Read-Host "Please enter the code"
 
$response = Invoke-WebRequest https://login.microsoftonline.com/common/oauth2/v2.0/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientid&redirect_uri=https://login.live.com/oauth20_desktop.srf&code=$code&grant_type=authorization_code"
 
Write-Output "Refresh token: " ($response.Content | ConvertFrom-Json).refresh_token 

Antes de poder ejecutar el script de PowerShell, debe seguir estos pasos para obtener un identificador de cliente.

  1. Vaya a https://apps.dev.microsoft.com y haga clic en Agregar una aplicación.
  2. Escriba un nombre de aplicación, por ejemplo, Cliente de scripts. (No compruebe Configuración guiada).
  3. Haga clic en Crear y anote el ID de aplicación (ID de cliente).
  4. Haga clic en Agregar plataforma y, después, en Aplicación nativa.
  5. En Permisos delegados de Microsoft Graph, haga clic en Agregar y seleccione Files. Leer y offline_access.
  6. Haga clic en Guardar.

Abra el Bloc de notas o su editor favorito y copie el script de PowerShell en el editor. Establezca $clientID su configuración en el identificador de aplicación que recibió al registrar la aplicación.

$clientId = "abc123-4d9e-44f1-837d-a7244af50027"

Guarda el archivo y asígnale un nombre GetTokens.ps1 (puedes ponerle el nombre que quieras, pero la extensión debe ser .ps1).

Ahora abra una ventana de consola. Para abrir una ventana de consola en Microsoft Windows, escriba el siguiente comando Ejecutar de Windows (<botón> Windows+R):

cmd.exe

En el símbolo del sistema, vaya a la carpeta donde guardó GetTokens.ps1. Después, escriba el comando siguiente.

powershell.exe -File .\GetTokens.ps1

Si recibe un error de directiva de ejecución, deberá cambiar la directiva de ejecución. Para ver las opciones de directiva de ejecución, consulte Acerca de las directivas de ejecución. Para cambiar la directiva de ejecución de una sesión, escriba el siguiente comando:

powershell.exe -ExecutionPolicy Bypass -File .\GetTokens.ps1

Cuando el script de PowerShell se ejecuta correctamente, inicia una sesión del explorador en la que escribe las credenciales de su cuenta de Microsoft (MSA) (las credenciales deben tener acceso a los archivos de OneDrive). Después de dar el consentimiento, la barra de direcciones del navegador contiene el código de concesión (consulte ?code={copy this code}).

https://login.live.com/oauth20_desktop.srf?code=M7ab570e5-a1c0-32e5-a946-e4490c822954&lc=1033

Copie el código de subvención (M7ab570e5-a1c0-32e5-a946-e4490c822954) e introdúzcalo en la ventana de la consola en el símbolo del sistema. Entonces, el script de PowerShell devuelve un token de actualización. Use el token de actualización en el script para obtener el token de acceso. Debe tratar el token de actualización como lo haría con una contraseña; si alguien lo consigue, tendrá acceso a sus datos de OneDrive.

El token de actualización es de larga duración, pero puede llegar a ser no válido. Si recibe un error de invalid_grant, el token de actualización ya no es válido y tendrá que volver a ejecutar el script de PowerShell para obtener el consentimiento y un nuevo token de actualización.

Ejemplo que descarga un archivo CSV

Después de obtener el token de actualización, en el ejemplo siguiente se muestra cómo 1) usar el token de actualización para obtener un token de acceso y 2) llamar a Microsoft Graph para obtener una dirección URL de descarga que se usa para descargar el archivo CSV. Reemplace {yourclientid} por el identificador de aplicación de la aplicación registrada y reemplace {yourrefreshtoken} por el token de actualización.

function main() {
    var clientId = "{yourclientid}";
    var refreshToken = "{yourrefreshtoken}";

    var options = {
        'method' : 'post',
        'contentType' : 'application/x-www-form-urlencoded',
        'payload' : `client_id=${clientId}&redirect_uri=https://login.live.com/oauth20_desktop.srf&refresh_token=${refreshToken}&grant_type=refresh_token`
    };
    
    // Use the refresh token to get the access token.

    var response = UrlFetchApp.fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', options);
 
    var tokens = JSON.parse(response.getContentText());

    // Get the contents of the CSV file from OneDrive passing the access token in the Authorization header. 
    // Replace the path and file name (/me/drive/root/children/bids.csv) with your path and file name.

    response = UrlFetchApp.fetch('https://graph.microsoft.com/v1.0/me/drive/root/children/bids.csv/content', { headers: { Authorization: `Bearer ${tokens['access_token']}` } });    
 
    // Read and parse the contents of the file. The parseCSV method is a placeholder for 
    // whichever method you provide to parse the file.

    var file = response.getContentText();
    var data = parseCSV(file);
}

Analizar el archivo CSV

No hay una herramienta de análisis de CSV integrada, por lo que tendrá que escribir la suya propia o encontrar una en línea. Por ejemplo, una búsqueda rápida en línea encontró este en Stack Overflow. Si encuentras una en línea, asegúrate de que no tenga restricciones de uso.

Acceso a los servicios de Google

Para obtener información sobre el uso de UrlFetchApp para acceder a los servicios de Google, consulta Llamar a los servicios de Google.