Captura de recursos de la web

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

Solicitud GET simple

Use 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, use 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 respuesta, llame al fetch(url, params) método en su lugar y establezca el parámetro muteHttpExceptions en true. Al establecer muteHttpExceptions en true siempre se devuelve el control al script. A continuación, deberá llamar al getResponseCode() método para determinar el éxito o el error de la solicitud 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');
    }

Adición, actualización o eliminación de un recurso web

Si necesita agregar, actualizar o eliminar un recurso web, use el método fetch(url, params). Este método le 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 JSON. Dado que la carga es un objeto JSON, el ejemplo establece el contentType parámetro en 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());    

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

Para obtener un archivo de OneDrive (https://onedrive.live.com), use Microsoft Graph. El acceso a un archivo de OneDrive requiere un token de acceso de OAuth. Y la obtención de un token de acceso requiere el consentimiento del usuario a menos que tenga un token de actualización. Pero dado que Scripts no admite componentes de interfaz de usuario, tendrá que obtener el consentimiento de otra manera. Si aún no tiene otra manera de obtener un token de actualización, este es un script de PowerShell que puede 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 

Para 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 como cliente scripts. (No compruebe la configuración guiada).
  3. Haga clic en Crear y anote el identificador de la aplicación (id. de cliente).
  4. Haga clic en Agregar plataforma y, a continuación , en Aplicación nativa.
  5. En Permisos delegados de Microsoft Graph, haga clic en Agregar y seleccione Archivos.Lectura y offline_access.
  6. Haga clic en Guardar.

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

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

Guarde el archivo y asígnele el nombre GetTokens.ps1 (puede asignarle el nombre que desee, pero la extensión debe estar .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> de Windows+r):

cmd.exe

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

powershell.exe -File .\GetTokens.ps1

Si recibe un error de directiva de ejecución, tendrá que cambiar la directiva de ejecución. Para ver las opciones de la 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, se inicia una sesión del explorador en la que se escriben las credenciales de la cuenta Microsoft (MSA) (las credenciales deben tener acceso a los archivos de OneDrive). Después de dar su consentimiento, la barra de direcciones del explorador contiene el código de concesión (vea ?code={copy this code}).

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

Copie el código de concesión (M7ab570e5-a1c0-32e5-a946-e4490c822954) y introdúzcalo en la ventana de la consola en el símbolo del sistema. A continuación, 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 se queda con ella, tiene acceso a los datos de OneDrive.

El token de actualización es de larga duración, pero puede dejar de ser válido. Si recibe un error 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 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);
}

Análisis del archivo CSV

No hay ninguna herramienta de análisis CSV integrada, por lo que tendrá que escribir la suya propia o buscar una en línea. Por ejemplo, una búsqueda rápida en línea encontró esta en Stack Overflow. Si encuentra una en línea, asegúrese de que no tiene 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, consulte Llamadas a servicios de Google.