Recupero di risorse dal Web

Se è necessario gestire le risorse sul Web, usare i metodi seguenti di UrlFetchApp.

Richiesta GET semplice

Usare fetch(url) se è sufficiente ottenere una risorsa Web.

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

Il fetch(url) metodo restituisce un oggetto HTTResponse , che include i metodi per la lettura della risposta. Utilizzare il getContentText metodo per leggere una risposta di testo e getContent per leggere una risposta binaria.

Se il corpo della risposta contiene un oggetto JSON, usare getContentText per ottenere l'oggetto JSON. Per accedere ai singoli campi nell'oggetto JSON, usare il JSON.parse() metodo per analizzare la risposta.

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

Gestione degli errori HTTP

Se la richiesta ha esito negativo (ad esempio, con 400 richiesta non valida), il servizio interrompe l'elaborazione dello script e scrive un messaggio di errore nel log. Il messaggio include il codice di stato HTTP della richiesta, ma non il messaggio di errore che potrebbe trovarsi nel corpo della risposta.

Se è necessario ottenere il corpo della risposta, chiamare invece il fetch(url, params) metodo e impostare il parametro muteHttpExceptions su true. L'impostazione di muteHttpExceptions su true restituisce sempre il controllo allo script. Sarà quindi necessario chiamare il getResponseCode() metodo per determinare l'esito positivo o negativo della richiesta e agire di conseguenza.

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

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

Aggiunta, aggiornamento o eliminazione di una risorsa Web

Se è necessario aggiungere, aggiornare o eliminare una risorsa Web, usare il metodo fetch(url, params). Questo metodo consente di specificare il verbo HTTP da usare, l'intestazione Content-Type, tutte le altre intestazioni necessarie per la richiesta e il payload della richiesta. Per informazioni dettagliate su questi parametri, vedere l'oggetto UrlFetchParams .

L'esempio seguente ottiene una risorsa che richiede un token di accesso OAuth. Poiché GET è il verbo HTTP predefinito del metodo fetch, l'unico parametro da specificare è il headers parametro .

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

Questo esempio invia una richiesta POST con un payload JSON. Poiché il payload è un oggetto JSON, nell'esempio il parametro viene impostato su contentTypeapplication/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 di UrlFetchApp per ottenere un file di dati o un file CSV da OneDrive.

Per ottenere un file da OneDrive (https://onedrive.live.com), usare Microsoft Graph. L'accesso a un file di OneDrive richiede un token di accesso OAuth. E ottenere un token di accesso richiede il consenso dell'utente a meno che non si disponga di un token di aggiornamento. Tuttavia, poiché script non supportano i componenti dell'interfaccia utente, dovrai ottenere il consenso in un altro modo. Se non si ha già un altro modo per ottenere un token di aggiornamento, ecco uno script di PowerShell che è possibile eseguire per ottenere il consenso e il token di aggiornamento.

$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 

Prima di poter eseguire lo script di PowerShell, è necessario seguire questa procedura per ottenere un ID client.

  1. Passare a https://apps.dev.microsoft.com e fare clic su Aggiungi un'app.
  2. Immettere un nome dell'app, ad esempio Script client. Non controllare la configurazione guidata.
  3. Fare clic su Crea e prendere nota dell'ID applicazione (ID client).
  4. Fare clic su Aggiungi piattaforma e quindi su Applicazione nativa.
  5. In Autorizzazioni delegate di Microsoft Graph fare clic su Aggiungi e selezionare File.Lettura e offline_access.
  6. Fare clic su Salva.

Aprire il Blocco note o l'editor preferito e copiare lo script di PowerShell nell'editor. Impostare $clientID sull'ID applicazione ricevuto al momento della registrazione dell'app.

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

Salvare il file e denominarlo GetTokens.ps1 (è possibile denominarlo come desiderato, ma l'estensione deve essere .ps1).

Aprire ora una finestra della console. Per aprire una finestra della console in Microsoft Windows, immettere il comando Esegui Windows seguente (<pulsante> Windows+r):

cmd.exe

Al prompt dei comandi passare alla cartella in cui è stato salvato GetTokens.ps1. Immettere quindi il comando seguente.

powershell.exe -File .\GetTokens.ps1

Se viene visualizzato un errore dei criteri di esecuzione, è necessario modificare i criteri di esecuzione. Per le opzioni dei criteri di esecuzione, vedere Informazioni sui criteri di esecuzione. Per modificare i criteri di esecuzione per una sessione, immettere il comando seguente:

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

Quando lo script di PowerShell viene eseguito correttamente, avvia una sessione del browser in cui si immettono le credenziali dell'account Microsoft (MSA) (le credenziali devono avere accesso ai file di OneDrive). Dopo il consenso, la barra degli indirizzi del browser contiene il codice di concessione (vedere ?code={copiare questo codice}).

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

Copiare il codice di concessione (M7ab570e5-a1c0-32e5-a946-e4490c822954) e immetterlo nella finestra della console al prompt. Lo script di PowerShell restituisce quindi un token di aggiornamento. Usare il token di aggiornamento nello script per ottenere il token di accesso. È consigliabile considerare il token di aggiornamento come se si trattasse di una password; se qualcuno ne è in possesso, ha accesso ai dati di OneDrive.

Il token di aggiornamento è di lunga durata, ma può diventare non valido. Se viene visualizzato un errore di invalid_grant, il token di aggiornamento non è più valido ed è necessario eseguire di nuovo lo script di PowerShell per ottenere il consenso e un nuovo token di aggiornamento.

Esempio che scarica un file CSV

Dopo aver ottenuto il token di aggiornamento, nell'esempio seguente viene illustrato come usare il token di aggiornamento per ottenere un token di accesso e 2) chiamare Microsoft Graph per ottenere un URL di download usato per scaricare il file CSV. Sostituire {yourclientid} con l'ID applicazione dell'app registrata e {yourrefreshtoken} con il token di aggiornamento.

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);
}

Analizzare il file CSV

Non è disponibile uno strumento di analisi CSV predefinito, quindi è necessario scriverne uno personale o trovarne uno online. Ad esempio, una ricerca rapida online ha trovato questo in Stack Overflow. Se ne trovi uno online, assicurati che non abbia restrizioni di utilizzo.

Accesso a Google Services

Per informazioni sull'uso di UrlFetchApp per accedere ai servizi Google, vedere Chiamata ai servizi Google.