次の方法で共有


Web からのリソースのフェッチ

Web 上のリソースを管理する必要がある場合は、 UrlFetchApp の次のメソッドを使用します。

単純な GET 要求

Web リソースを取得するだけで済む場合は、 を使用 fetch(url) します。

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

メソッドは fetch(url) 、応答を読み取るためのメソッドを持つ HTTResponse オブジェクトを返します。 テキスト応答の getContentText 読み取りと getContent バイナリ応答の読み取りには、 メソッドを使用します。

応答本文に JSON オブジェクトが含まれている場合は、 を使用 getContentText して JSON オブジェクトを取得します。 JSON オブジェクト内の個々のフィールドにアクセスするには、 メソッドを JSON.parse() 使用して応答を解析します。

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

HTTP エラーの処理

要求が失敗した場合 (たとえば、400 Bad 要求など)、サービスはスクリプトの処理を停止し、エラー メッセージをログに書き込みます。 メッセージには要求の HTTP 状態コードが含まれますが、応答の本文にある可能性があるエラー メッセージは含まれません。

応答本文を取得する必要がある場合は、代わりに メソッドを fetch(url, params) 呼び出し、muteHttpExceptions パラメーターを true に設定 します。 muteHttpExceptions を true に設定すると、常にスクリプトに制御が返されます。 その後、 メソッドを呼び出 getResponseCode() して要求の成功または失敗を判断し、それに応じて対処する必要があります。

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

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

Web リソースの追加、更新、または削除

Web リソースを追加、更新、または削除する必要がある場合は、 fetch(url, params) メソッドを 使用します。 このメソッドを使用すると、使用する HTTP 動詞、Content-Type ヘッダー、要求に必要なその他のヘッダー、および要求のペイロードを指定できます。 これらのパラメーターの詳細については、 UrlFetchParams オブジェクトを参照してください。

次の例では、OAuth アクセス トークンを必要とするリソースを取得します。 GET はフェッチ メソッドの既定の HTTP 動詞であるため、指定する必要があるパラメーターは headers パラメーターのみです。

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

この例では、JSON ペイロードを使用して POST 要求を送信します。 ペイロードは JSON オブジェクトであるため、この例では パラメーターを 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());    

UrlFetchApp を使用して OneDrive からデータ ファイルまたは CSV ファイルを取得する。

OneDrive (https://onedrive.live.com) からファイルを取得するには、Microsoft Graph を使用します。 OneDrive ファイルにアクセスするには、OAuth アクセス トークンが必要です。 また、アクセス トークンを取得するには、更新トークンがない限り、ユーザーの同意が必要です。 ただし、スクリプトは UI コンポーネントをサポートしていないため、別の方法で同意する必要があります。 更新トークンを取得する別の方法がまだない場合は、同意と更新トークンを取得するために実行できる PowerShell スクリプトを次に示します。

$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 

PowerShell スクリプトを実行する前に、次の手順に従ってクライアント ID を取得する必要があります。

  1. https://apps.dev.microsoft.com 移動し、[ アプリの追加] をクリックします。
  2. Scripts クライアントなどのアプリ名を入力します。 (ガイド付き設定は確認しないでください)。
  3. [ 作成 ] をクリックし、アプリケーション ID (クライアント ID) をメモします。
  4. [ プラットフォームの追加] をクリックし、[ ネイティブ アプリケーション] をクリックします。
  5. [Microsoft Graph 委任されたアクセス許可] で、[追加] をクリックし、[Files.Read and offline_access] を選択します。
  6. [保存] をクリックします。

メモ帳またはお気に入りのエディターを開き、PowerShell スクリプトをエディターにコピーします。 アプリを登録したときに受け取ったアプリケーション ID に設定 $clientID します。

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

ファイルを保存して GetTokens.ps1 名前を付けます (名前は任意ですが、拡張子は .ps1 する必要があります)。

次に、コンソール ウィンドウを開きます。 Microsoft Windows でコンソール ウィンドウを開くには、次の Windows Run コマンド (<Windows ボタン> + r) を入力します。

cmd.exe

コマンド プロンプトで、GetTokens.ps1 保存したフォルダーに移動します。 次に、次のコマンドを入力します。

powershell.exe -File .\GetTokens.ps1

実行ポリシー エラーが発生した場合は、実行ポリシーを変更する必要があります。 実行ポリシー オプションについては、「 実行ポリシーについて」を参照してください。 セッションの実行ポリシーを変更するには、次のコマンドを入力します。

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

PowerShell スクリプトが正常に実行されると、Microsoft アカウント (MSA) の資格情報を入力するブラウザー セッションが開始されます (資格情報は OneDrive ファイルにアクセスできる必要があります)。 同意すると、ブラウザーのアドレス バーに許可コードが含まれます (「?code={copy this code}」を参照してください)。

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

許可コード (M7ab570e5-a1c0-32e5-a946-e4490c822954) をコピーし、プロンプトのコンソール ウィンドウに入力します。 その後、PowerShell スクリプトは更新トークンを返します。 スクリプトで更新トークンを使用して、アクセス トークンを取得します。 更新トークンは、パスワードと同様に扱う必要があります。誰かがそれを手に入れると、OneDrive データにアクセスできます。

更新トークンは有効期間が長いですが、無効になる可能性があります。 invalid_grant エラーが発生した場合、更新トークンは無効になり、同意と新しい更新トークンを取得するには、PowerShell スクリプトをもう一度実行する必要があります。

CSV ファイルをダウンロードする例

更新トークンを取得した後、次の例は、1) 更新トークンを使用してアクセス トークンを取得し、2) Microsoft Graph を呼び出して CSV ファイルのダウンロードに使用するダウンロード URL を取得する方法を示しています。 {yourclientid} を登録済みのアプリのアプリケーション ID に置き換え、{yourrefreshtoken} を更新トークンに置き換えます。

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

CSV ファイルを解析する

組み込みの CSV 解析ツールがないため、独自の CSV 解析ツールを作成するか、オンラインで検索する必要があります。 たとえば、オンラインのクイック検索で、Stack Overflow で この 検索が見つかりました。 オンラインで見つけた場合は、使用制限がないことを確認してください。

Google サービスへのアクセス

UrlFetchApp を使用して Google サービスにアクセスする方法については、「Google サービスの呼び出し」を参照してください。