Partilhar via


Obter recursos da Web

Se precisar de gerir recursos na Web, utilize os seguintes métodos de UrlFetchApp.

Pedido GET simples

Utilize fetch(url) se apenas precisar de obter um recurso Web.

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

O fetch(url) método devolve um objeto HTTResponse , que tem os métodos para ler a resposta. Utilize o getContentText método para ler uma resposta de texto e getContent para ler uma resposta binária.

Se o corpo da resposta contiver um objeto JSON, utilize getContentText para obter o objeto JSON. Para aceder aos campos individuais no objeto JSON, utilize o JSON.parse() método para analisar a resposta.

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

Lidar com erros HTTP

Se o pedido falhar (por exemplo, com 400 Pedido incorreto), o serviço deixa de processar o script e escreve uma mensagem de erro no registo. A mensagem inclui o código de estado HTTP do pedido, mas não a mensagem de erro que pode estar no corpo da resposta.

Se precisar de obter o corpo da resposta, chame o fetch(url, params) método e defina o parâmetro muteHttpExceptions como verdadeiro. Definir muteHttpExceptions como verdadeiro devolve sempre o controlo ao script. Em seguida, terá de chamar o getResponseCode() método para determinar o êxito ou a falha do pedido e agir em conformidade.

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

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

Adicionar, atualizar ou eliminar um recurso Web

Se precisar de adicionar, atualizar ou eliminar um recurso Web, utilize o método fetch(url, parâmetros ). Este método permite-lhe especificar o verbo HTTP a utilizar, o cabeçalho Tipo de Conteúdo, quaisquer outros cabeçalhos de que o pedido precisa e o payload do pedido. Para obter detalhes sobre estes parâmetros, veja o objeto UrlFetchParams .

O exemplo seguinte obtém um recurso que requer um token de acesso OAuth. Uma vez que GET é o verbo HTTP predefinido do método de obtenção, o único parâmetro que precisa de especificar é o 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());    

Este exemplo envia um pedido POST com um payload JSON. Uma vez que o payload é um objeto JSON, o exemplo define o contentType parâmetro como 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());    

Utilizar UrlFetchApp para obter um ficheiro de dados ou ficheiro CSV a partir do OneDrive.

Para obter um ficheiro do OneDrive (https://onedrive.live.com), utilize o Microsoft Graph. Aceder a um ficheiro do OneDrive requer um token de acesso OAuth. Além disso, obter um token de acesso requer o consentimento do utilizador, a menos que tenha um token de atualização. No entanto, como os Scripts não suportam componentes de IU, terá de obter consentimento de outra forma. Se ainda não tiver outra forma de obter um token de atualização, eis um script do PowerShell que pode executar para obter o consentimento e o token de atualização.

$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 executar o script do PowerShell, tem de seguir estes passos para obter um ID de cliente.

  1. Aceda a https://apps.dev.microsoft.com e clique em Adicionar uma aplicação.
  2. Introduza um nome de aplicação como Cliente scripts. (Não verifique a Configuração orientada.)
  3. Clique em Criar e anote o ID da aplicação (ID de cliente).
  4. Clique em Adicionar Plataforma e, em seguida, em Aplicação Nativa.
  5. Em Permissões delegadas do Microsoft Graph, clique em Adicionar e selecione Ficheiros.Leitura e offline_access.
  6. Clique em Guardar.

Abra o Bloco de Notas ou o seu editor favorito e copie o script do PowerShell para o editor. Defina $clientID como o ID da aplicação que recebeu quando registou a sua aplicação.

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

Guarde o ficheiro e dê-lhe o nome GetTokens.ps1 (pode atribuir-lhe o nome que quiser, mas a extensão tem de ser .ps1).

Agora, abra uma janela da consola. Para abrir uma janela de consola no Microsoft Windows, introduza o seguinte comando Executar do Windows (<botão> do Windows+r):

cmd.exe

Na linha de comandos, navegue para a pasta onde guardou GetTokens.ps1. Em seguida, introduza o seguinte comando.

powershell.exe -File .\GetTokens.ps1

Se receber um erro de política de execução, terá de alterar a política de execução. Para obter opções de política de execução, veja Acerca das Políticas de Execução. Para alterar a política de execução de uma sessão, introduza o seguinte comando:

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

Quando o script do PowerShell é executado com êxito, inicia uma sessão do browser na qual introduz as credenciais da sua conta Microsoft (MSA) (as credenciais têm de ter acesso aos seus ficheiros do OneDrive). Após o consentimento, a barra de endereço do browser contém o código de concessão (consulte ?code={copy this code}).

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

Copie o código de concessão (M7ab570e5-a1c0-32e5-a946-e4490c822954) e introduza-o na janela da consola no pedido. Em seguida, o script do PowerShell devolve um token de atualização. Utilize o token de atualização no script para obter o token de acesso. Deve tratar o token de atualização como se fosse uma palavra-passe; Se alguém o conseguir, terá acesso aos seus dados do OneDrive.

O token de atualização é de longa duração, mas pode tornar-se inválido. Se receber um erro de invalid_grant, o token de atualização já não é válido e terá de executar novamente o script do PowerShell para obter o consentimento e um novo token de atualização.

Exemplo que transfere um ficheiro CSV

Depois de obter o token de atualização, o exemplo seguinte mostra como 1) utilizar o token de atualização para obter um token de acesso e 2) chamar o Microsoft Graph para obter um URL de transferência que utiliza para transferir o ficheiro CSV. Substitua {yourclientid} pelo ID da aplicação registada e substitua {yourrefreshtoken} pelo token de atualização.

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

Analisar o ficheiro CSV

Não existe nenhuma ferramenta de análise CSV incorporada, pelo que terá de escrever a sua própria ferramenta ou encontrar uma online. Por exemplo, uma pesquisa rápida online encontrou esta no Stack Overflow. Se encontrar um online, certifique-se de que não tem restrições de utilização.

Aceder aos serviços Google

Para obter informações sobre como utilizar o UrlFetchApp para aceder aos serviços Google, consulte Chamar serviços Google.