サードパーティ API

Google 広告スクリプトの機能の一つは、データを統合できることです。 サードパーティ API からアクセスできる。

このガイドでは、スクリプトの作成に役立つ次のコンセプトについて説明します。 他のサービスへの接続:

  • HTTP リクエストの作成: 使用方法 アクセスするには UrlFetchApp 外部 API を提供します。
  • 認証: 一般的な認証シナリオについて説明します。
  • レスポンスの解析: 返された JSON データと XML データを処理する方法。

また 数値のサンプル よく使われる API のリストを紹介します。

UrlFetchApp を使用してデータを取得する

UrlFetchApp には、 サードパーティ API の操作に必要なコア機能を提供します。

次の例は、気象データを OpenWeatherMapOpenWeatherMap を選んだ理由は 比較的シンプルな認証スキームと API です。

リクエストを作成する

OpenWeatherMap のドキュメントでは、 現在の天気をリクエストするための形式 次のとおりです。

http://api.openweathermap.org/data/2.5/weather?q=[location]&apikey=[apikey]

この URL は、最初の承認例です。パラメータ apikey は、 必須で、値はユーザーごとに一意です。この鍵は お申し込みください。

登録後、キーを使用したリクエストを次のように発行できます。

const location = 'London,uk';
const apikey = 'da.......................81'; // Replace with your API key
const currentWeatherUrl = `http://api.openweathermap.org/data/2.5/weather?q=${location}&apiKey=${apiKey}`;
const response = UrlFetchApp.fetch(currentWeatherUrl);
console.log(response.getContentText());

このコードを実行すると、JSON の長い文字列が生成されます。 Google 広告スクリプトのロギング ウィンドウに書き込まれるテキスト。

次のステップでは、これを 使用します。

JSON データ

多くの API では、レスポンスが JSON 形式で提供されます。これは単純な Pod 構成を JavaScript オブジェクトのシリアル化(オブジェクト、配列、基本型など) 文字列として表現および転送できます。

JSON 文字列(たとえば、 OpenWeatherMap - JavaScript オブジェクトに戻り、 JSON.parse メソッドを使用します。上記の例から続けます。

const json = response.getContentText();
const weatherData = JSON.parse(json);
console.log(weatherData.name);
//  "London"

JSON.parse メソッドは文字列をオブジェクトに変換します。このオブジェクトにはプロパティがあります。 name

詳細については、レスポンスを解析するをご覧ください。 さまざまな形式で API レスポンスを操作できます。

エラー処理

エラー処理はサードパーティ API を使用する際に重要な考慮事項 サードパーティ API は頻繁に変更されることが多く、生成される 次のような予期しないレスポンス値が返されます。

  • API の URL やパラメータは、知らないうちに変更される場合があります。
  • API キー(または他のユーザー認証情報)は期限切れになる可能性があります。
  • 回答の形式は予告なく変更される場合があります。

HTTP ステータス コード

予期しないレスポンスが発生する可能性があるため、HTTP ステータス コード。デフォルトでは HTTP エラーコードが発生すると、UrlFetchApp は例外をスローします。宛先 この動作を変更するには、 次の例をご覧ください。

const options = {
  muteHttpExceptions: true
}
const response = UrlFetchApp.fetch(url, options);
// Any status code greater or equal to 400 is either a client or server error.
if (response.getResponseCode() >= 400) {
  // Error encountered, send an email alert to the developer
  sendFailureEmail();
}

レスポンスの構造

サードパーティ API が変更された場合、デベロッパーは多くの場合、 スクリプトに影響する可能性がある変更に 対処することもできますたとえば、name プロパティが locationName に変更され、スクリプト このプロパティを使用すると失敗します。

このため、返された構造が次の条件を満たしているかどうかをテストすることをおすすめします。 次に例を示します。

const weatherData = JSON.parse(json);
if (weatherData && weatherData.name) {
  console.log('Location is : ' + name);
} else {
  console.log('Data not in expected format');
}

UrlFetchApp での POST データ

OpenWeatherMap を使用した簡単な例 表示されます。通常、リモート側で状態を変更しない API 呼び出しは、 HTTP GET を使用する メソッドを呼び出します。

GET メソッドは UrlFetchApp のデフォルトです。ただし、一部の API 呼び出しでは、 呼び出しなどの場合は、他のメソッドが必要です。 POSTPUT など。

次の例は、UrlFetchAppPOST 呼び出しを使用する方法を示しています。 コラボレーション メッセージ アプリである Slack との統合を実証している Slack ユーザーとグループに Slack メッセージを送信します。

Slack を設定する

このガイドでは、すでに Slack アカウントに登録していることを前提としています。

前の例の OpenWeatherMap と同様に、 メッセージ送信を可能にします。Slack の一意の URL を使用すると、 着信 Webhook と呼ばれるメッセージをチームに送信します。

[Set up a ingress Webhook] をクリックして、 受信 Webhook 統合を追加し、手順に沿って操作します。「 メッセージに使用する URL を発行する必要があります。

POST リクエストを行う

受信 Webhook のセットアップは、POST リクエストに必要なだけです。 指定された options パラメータで追加のプロパティを使用して UrlFetchApp.fetch:

  • method: 前述のとおり、デフォルトは GET ですが、ここではオーバーライドして、 POST に設定します。
  • payload: POST の一部としてサーバーに送信されるデータ リクエストできます。この例では、Slack は JSON 形式にシリアル化されたオブジェクトを想定しています。 Slack の ドキュメントをご覧ください。ここでは、 JSON.stringify メソッドが使用され、Content-Typeapplication/json に設定されています。

      // Change the URL for the one issued to you from 'Setting up Slack'.
      const SLACK_URL = 'https://hooks.slack.com/services/AAAA/BBBB/CCCCCCCCCC';
      const slackMessage = {
        text: 'Hello, slack!'
      };
    
      const options = {
        method: 'POST',
        contentType: 'application/json',
        payload: JSON.stringify(slackMessage)
      };
      UrlFetchApp.fetch(SLACK_URL, options);
    

拡張された Slack の例

上記の例は、Slack への受信メッセージを有効にするための最小要件を示しています。「 拡張サンプルでは、 キャンペーンの作成と送信 報告する 書式設定と表示オプションもあります。

着信したメッセージ

Slack でメッセージの形式設定を確認する ドキュメントをご覧ください。

フォームデータ

上記の例では、payload プロパティとして JSON 文字列を使用しています。 POST リクエスト。

payload の形式に応じて、UrlFetchApp のアプローチは異なります 次のようにして、POST リクエストを作成します。

  • payload が文字列の場合、文字列引数は 使用します。
  • payload がオブジェクト(値のマップなど)の場合:

    {to: 'mail@example.com', subject:'Test', body:'Hello, World!'}
    

    Key-Value ペアが form-data に変換されます。

    subject=Test&to=mail@example.com&body=Hello,+World!
    

    また、リクエストの Content-Type ヘッダーは次のように設定されます。 application/x-www-form-urlencoded

一部の API では、POST リクエストの送信時にフォームデータを使用する必要があるため、 JavaScript オブジェクトからフォームデータへの自動変換が有用なのは、 念頭に置いてください

HTTP 基本認証

HTTP ベーシック 認証は、Google Cloud の 最もシンプルな認証形式であり、多くの API で使用されています。

認証は、エンコードされたユーザー名とパスワードを 各リクエストの HTTP ヘッダー。

HTTP 基本認証

リクエストを作成する

認証されたリクエストを生成するには、次の手順が必要です。

  1. ユーザー名とパスワードを結合し、パスフレーズを形成します。 コロン(例: username:password)。
  2. パスフレーズを Base64 でエンコードします。たとえば、username:passworddXNlcm5hbWU6cGFzc3dvcmQ=
  3. Authorization: Basic <encoded passphrase> の形式で Authorization ヘッダーをリクエストに追加します。

次のスニペットは、Google 広告スクリプトでこれを実現する方法を示しています。

const USERNAME = 'your_username';
const PASSWORD = 'your_password';
const API_URL = 'http://<place_api_url_here>';

const authHeader = 'Basic ' + Utilities.base64Encode(USERNAME + ':' + PASSWORD);
const options = {
  headers: {Authorization: authHeader}
}
// Include 'options' object in every request
const response = UrlFetchApp.fetch(API_URL, options);

基本認証のサンプル

コードサンプル セクションには、HTTP 基本認証の使用例を 2 つ挙げています。

Plivo

Plivo は、Google Chat のメッセージ送信と API 経由で SMS メッセージを受信しますこのサンプルは、 ブロックすることもできます。

  1. Plivo に登録します。
  2. スクリプト例を 新しいスクリプトを作成します
  3. PLIVO_ACCOUNT_AUTHIDPLIVO_ACCOUNT_AUTHTOKEN の値を 値を管理ダッシュボードから取得します。
  4. 通知用のスクリプトで指定されているメールアドレスを入力してください。 表示されます。
  5. Plivo を使用するには、番号を購入するか、トライアルに番号を追加する必要があります あります。サンドボックス番号を追加して、 使用できます。
  6. 送信者として表示される番号と受信者の両方を追加してください あります。
  7. スクリプトの PLIVO_SRC_PHONE_NUMBER をサンドボックス番号のいずれかに更新します。 表示されます。これには、国際国コードを含める必要があります。 たとえば、英国の電話番号の場合は 447777123456 です。

Twilio

Twilio は、ドキュメントの送信と受信を容易にする API 経由で SMS メッセージを受信しますこのサンプルは、 ブロックすることもできます。

  1. Twillio に登録します。
  2. スクリプト例を貼り付けてください 新しいスクリプトに変換できます
  3. TWILIO_ACCOUNT_SIDTWILIO_ACCOUNT_AUTHTOKEN の値を アカウント コンソール ページに表示される値。
  4. TWILIO_SRC_PHONE_NUMBER は、表示された番号に置き換えます。 ダッシュボード -- これは メッセージを送信するために Twilio によって承認された番号です。

OAuth 1.0

一般的なサービスの多くは、認証に OAuth を使用しています。OAuth には、 フレーバーとバージョンです。

一方、HTTP 基本認証では、 使用するのは 1 組のユーザー名とパスワードのみですが、OAuth では、 ユーザー固有の認証情報を使用して、ユーザーのアカウントとデータに対するアクセスを サードパーティ アプリケーションです。さらに、アクセスの範囲も そのアプリケーションに固有のものになります。

OAuth 1.0 の背景については、OAuth コアガイドをご覧ください。 特に、6.OAuth による認証をご覧ください。フル 3 本足 OAuth 1.0 の場合、プロセスは次のとおりです。

  1. アプリケーション(「コンシューマ」)がリクエスト トークンを取得します。
  2. ユーザーがリクエスト トークンを承認します。
  3. アプリケーションは、リクエスト トークンをアクセス トークンと交換します。
  4. 後続のすべてのリソース リクエストでは、アクセス トークンが署名付きの リクエストできます。

サードパーティ サービスがユーザーの操作なしで OAuth 1.0 を使用する場合( 手順 1、2、3 は不可能です。 そのため、一部のサービスは構成からアクセス トークンを発行する これにより、アプリケーションはステップ 4 に直接進むことができます。これは one-legged OAuth 1.0 です。

OAuth1

Google 広告スクリプトにおける OAuth 1.0

Google 広告スクリプトでは、通常、各スクリプトはアプリケーションとして解釈されます。 通常は、コンソールまたはサービスの [管理設定] ページから 次のことを行うために必要です。

  • スクリプトを表すアプリケーション構成をセットアップする。
  • スクリプトに拡張される権限を指定します。
  • コンシューマ キー、コンシューマ シークレット、アクセス トークン、使用するアクセス シークレットを取得する 実装する方法を学びました

OAuth 2.0

OAuth 2.0 は、一般的な API で、 保護します。特定のサードパーティ サービスのアカウントの所有者が ユーザーデータへのアクセスを許可します。「 次のような利点があります。

  • アカウントの認証情報をアプリケーションと共有する必要がない。
  • データにアクセスできるアプリケーションを個別に制御したり、 どの程度かということです(たとえば、読み取り専用または特定のサービス アカウントの 抽出します)。

Google 広告スクリプトで OAuth 2.0 対応サービスを使用するには、いくつかの方法があります。 手順:

スクリプトの外部

Google 広告スクリプトにユーザーデータへのアクセスを許可するには、 サードパーティの API。ほとんどの場合、これに必要なのは アプリケーションを作成します。このアプリケーション Google 広告スクリプトを表します。

Google 広告 Script アプリケーションに付与するアクセス権を指定します。 通常はクライアント ID が割り当てられますこれにより OAuth 2 を使用して、組織内のデータにアクセスできるアプリケーションを そのデータのどの部分をユーザーが表示または あります。

スクリプト内

リモート サーバーで承認します権限付与タイプに応じて、 サーバーが許可した場合、フローと呼ばれる別のステップによって 最終的にはアクセス トークンが 後続のすべてのリクエストでそのセッションで使用されます。

API リクエストを行う。各リクエストでアクセス トークンを渡します。

認可フロー

各権限付与タイプとそれに対応するフローは、さまざまな使用シナリオに対応しています。対象 ユーザーがインタラクティブ イベントに参加している場合は、別のフローが使用されます。 アプリケーションを Google Cloud 内で実行する必要があるシナリオとは対照的に、 バックグラウンドで動作させることができます。

API プロバイダは、受け入れる権限付与タイプを決定します。これは、 ユーザーが API の統合を進める方法。

実装

どの OAuth フローでも、目的はアクセス トークンを取得することです。 残りのセッションでは、そのトークンを使用してリクエストを認証できます。

サンプル ライブラリ フロータイプごとの認証方法を示します。これらの メソッドは、アクセス トークンを取得して保存するオブジェクトを返します。 認証リクエストが容易になります

一般的な使用パターンは次のとおりです。

// Authenticate using chosen flow type
const urlFetchObj = OAuth2.<flow method>(args);
// Make request(s) using obtained object.
const response1 = urlFetchObj.fetch(url1);
const response2 = urlFetchObj.fetch(url2, options);

クライアント認証情報の付与

クライアント認証情報の付与は、 より簡単な形式の OAuth2 フローの一つです。このフローでは、アプリケーションが アプリケーションに固有の ID とシークレットが、 時間制限付きアクセス トークン

クライアント認証情報

// Access token is obtained and cached.
const authUrlFetch = OAuth2.withClientCredentials(
    tokenUrl, clientId, clientSecret, optionalScope));
// Use access token in each request
const response = authUrlFetch.fetch(url);
// ... use response

更新トークンの付与

更新トークンの付与はクライアント認証情報の付与に似ていますが、次の点が異なります。 サーバーへの単純なリクエストにより、アクセス トークンが返されます。このトークンを使用すると、 確認できます。

更新トークン

更新トークンを取得する

更新トークンの付与との違いは クライアント認証情報の付与に必要な認証情報は、 (たとえば、サービスのコントロール パネルで)更新トークンが付与されます。 認証コードなどのより複雑なフローの一部として、 インタラクション:

認証コード

OAuth Playground を使用して更新トークンを取得する

OAuth2 プレイグラウンドは、ユーザーが 認可コードの付与を実行して更新トークンを取得する。

右上の設定ボタンをクリックすると、すべてのパラメータを定義できます 次の要素が含まれています。

  • 認可エンドポイント: 認可のフローの開始点として使用されます。
  • トークン エンドポイント: アクセス トークンを取得するために更新トークンとともに使用します。
  • client ID and secret: アプリケーションの認証情報。

OAuth2 Playground

スクリプトを使用して更新トークンを取得する

フローを完了する代わりに、スクリプトを使用して 更新トークン 生成 表示されます。

更新トークンの使用

最初の承認が完了すると、サービスは更新を発行できるようになります。 このトークンは、クライアント認証情報フローと同様の方法で使用できます。 以下に 2 つの例を示します。

const authUrlFetch = OAuth2.withRefreshToken(tokenUrl, clientId, clientSecret,
    refreshToken, optionalScope);
const response = authUrlFetch.fetch(url);
// ... use response

検索広告 360 の例

検索広告 360 は、更新トークンで使用できる API の一例です。 このサンプルでは、スクリプトが レポートをご覧ください。検索広告 360 の その他のアクションの詳細については、360 API リファレンスをご覧ください。 示しています

スクリプトを作成する
  1. API Console で新しいプロジェクトを作成する の手順に沿ってクライアント ID、クライアント シークレット、更新トークンを取得します。 DoubleClick ガイドの手順 DoubleClick Search API が有効になっていることを確認します。
  2. サンプルを貼り付ける スクリプトを 新しいスクリプトを作成します
  3. サンプルの OAuth2 を貼り付けてください ライブラリ コードリストを作成します
  4. クライアント ID、クライアント シークレット、 更新トークンです

Apps Script Execution API の例

この例では、Apps Script を使用して、Apps Script で関数を実行する方法を示します。 Script Execution API。これにより Apps Script は Google 広告スクリプトから呼び出すことができます。

Apps Script スクリプトを作成する

新しいスクリプトを作成します。次のサンプルでは、 ドライブにある 10 個のファイル:

function listFiles() {
  const limit = 10;
  const files = [];
  const fileIterator = DriveApp.getFiles();
  while (fileIterator.hasNext() && limit) {
    files.push(fileIterator.next().getName());
    limit--;
  }
  return files;
}
Apps Script を実行用に構成する
  1. スクリプトを保存します。
  2. [リソース >Cloud Platform プロジェクト
  3. プロジェクト名をクリックして、API Console に移動します。
  4. [API とサービス
  5. 適切な API(この場合はドライブ)を有効にします。 APIApps スクリプトの実行 API を使用します。
  6. メニューの [認証情報] 項目から OAuth 認証情報を作成します。
  7. スクリプトに戻り、[公開 > API Executable としてデプロイするをご覧ください。
Google 広告スクリプトを作成する
  1. サンプルを貼り付ける スクリプトを 新しいスクリプトを作成します
  2. さらに、サンプルの OAuth2 ライブラリ コードリストを作成します
  3. クライアント ID、クライアント シークレット、 更新トークンです

サービス アカウント

前述の権限付与タイプの代わりとして、サービス 。

サービス アカウントは、ユーザーのアクセスに使用しないという点で、上記と異なります データ: 認証後、ユーザーに代わってサービス アカウントがリクエストを行う プロジェクトを所有するユーザーとしてではなく、アプリケーションが持つ権限を有します。たとえば サービス アカウントが Drive API を使用してファイルを作成する場合、 属しており、デフォルトでは、サービス アカウントからは プロジェクトのオーナーになります。

Google Natural Language API の例

Natural Language API は、 感情 分析エンティティ テキストの分析を行います。

この例では 感情 。これにより どの程度肯定的か メッセージの大きさで決まります ケーキを販売しています、またはロンドンで最高のケーキを販売しています。今すぐ購入!

スクリプトを設定する
  1. API Console で新しいプロジェクトを作成する
  2. Natural Language API を API
  3. プロジェクトに対する課金を有効にします。
  4. Service を作成する アカウント。 認証情報の JSON ファイルをダウンロードします。
  5. サンプルを貼り付ける スクリプトを新しい スクリプトを使用します。
  6. さらに、サンプルの OAuth2 ライブラリ コードリストを作成します
  7. 必要な値を置き換えます。 <ph type="x-smartling-placeholder">
      </ph>
    • serviceAccount: サービス アカウントのメールアドレス(例: xxxxx@yyyy.iam.gserviceaccount.com
    • key: Service の作成時にダウンロードした JSON ファイルの鍵 。-----BEGIN PRIVATE KEY... から ...END PRIVATE KEY-----\n まで。

API レスポンス

API はさまざまな形式でデータを返すことができます。その中でも最も注目すべきは XML です。 使用できます。

JSON

JSON は通常、XML よりも簡単に レスポンス形式を指定します。ただし、発生する可能性のある問題もいくつかあります。

回答の検証

API 呼び出しから正常なレスポンスを取得したら、通常は 次のステップでは、JSON.parse を使用して JSON 文字列を JavaScript に変換します。 渡されます。この時点で、解析結果を取得済みの場合に 失敗:

const json = response.getContentText();
try {
  const data = JSON.parse(json);
  return data;
} catch(e) {
  // Parsing of JSON failed - handle error.
}

また、API を管理できない場合は、API の構造を考慮し、 レスポンスが変更され、プロパティがなくなる可能性があります。

// Less good approach
// Assumes JSON was in form {"queryResponse": ...} when parsed.
const answer = data.queryResponse;

// Better approach
if (data && data.queryResponse) {
  const answer = data.queryResponse;
} else {
  // Format of API response has changed - alert developer or handle accordingly
}

XML

検証

XML は、今でも API の構築によく使用される形式です。API 呼び出しからのレスポンス 使用して解析できます。 XmlService parse メソッド:

const responseText = response.getContentText();
try {
  const document = XmlService.parse(responseText);
} catch(e) {
  // Error in XML representation - handle accordingly.
}

一方、XmlService.parse は XML のエラーを検出し、例外をスローします。 そのため、XML を検証することはできません。 説明します。

ルート要素

XML ドキュメントの解析に成功すると、ルート要素が取得される getRootElement() メソッドを使用します。

const document = XmlService.parse(responseText);
const rootElement = document.getRootElement();

名前空間

以下の例では、Sportradar API を使用しています。 を使用すると、選択した試合のサッカーの結果を取得できます。XML レスポンスは、 次の形式にします。

<schedule xmlns="http://feed.elasticstats.com/schema/soccer/sr/v2/matches-schedule.xsd">
  <matches>
     ...
  </matches>
</schedule>

ルート要素で名前空間がどのように指定されているかに注目してください。このため、 次のことを行うために必要です。

  • ドキュメントから namespace 属性を抽出します。
  • 子要素を走査してアクセスする場合は、この名前空間を使用します。

次のサンプルは、上記の <matches> 要素にアクセスする方法を示しています。 ドキュメント スニペット:

const document = XmlService.parse(xmlText);
const scheduleElement = document.getRootElement();
// The namespace is required for accessing child elements in the schema.
const namespace = scheduleElement.getNamespace();
const matchesElement = scheduleElement.getChild('matches', namespace);

値を取得する

フットボールのスケジュールのサンプルを考えると、次のようになります。

<match status="..." category="..." ... >
  ...
</match>

属性は、次のように取得できます。

const status = matchElement.getAttribute('status').getValue();

要素内に含まれるテキストは getText() を使用して読み取ることができますが、 要素のテキスト子が複数ある場合に連結されます。検討事項 getChildren() を使用します。また、子要素が複数ある場合は、それぞれの子に対して反復処理を行います。 テキストが子になる可能性が高いです。

Sportradar の例

このフル機能の Sportradar 例は、 サッカーの試合の詳細(特にイングリッシュ プレミアリーグ)を取得する 一致します。Soccer API は、Sportradar が提供するさまざまなスポーツ フィードの 1 つです。

Sportradar アカウントを設定する
  1. Sportradar のデベロッパー サイトに移動します。
  2. トライアル アカウントに登録します。
  3. 登録が完了したら、アカウントにログインします。
  4. ログインしたら、[MyAccount] に移動します。

Sportradar は、さまざまなスポーツを異なる API に分けます。たとえば、 Soccer API へのアクセスは購入できますが、Tennis API へのアクセスは購入できません。各 作成するアプリケーションには、さまざまなスポーツが関連付けられる場合があります。 あります。

  1. [Applications] で、[Create a new Application] をクリックします。アプリケーションに 名前と説明を入力します。ウェブサイト フィールドは無視します。
  2. [Issue a new key for Soccer Trial Europe v2] のみを選択します。
  3. [Register Application] をクリックします。

成功すると、新しい API キーが記載されたページが表示されます。

  1. スクリプト例を貼り付けてください 新しいスクリプトに変換できます
  2. リスティングの API キーを上記で取得したキーに置き換え、 入力します。

トラブルシューティング

サードパーティ API を使用すると、さまざまな理由でエラーが発生する可能性があります。 例:

  • API で想定されていない形式でクライアントにリクエストを発行するクライアント。
  • クライアントが、発生したレスポンス形式とは異なるレスポンス形式を想定しています。
  • クライアントが無効なトークン、キー、または値をプレースホルダとして残している。
  • クライアントが使用量上限に達しています。
  • クライアントが無効なパラメータを指定しています。

これらすべてのケースで、原因を特定するための適切な最初のステップは、 エラーの原因となっているレスポンスの詳細を調べることです。

レスポンスを解析する

デフォルトでは、エラー(ステータス コードが 400 以上)は、 Google 広告スクリプト エンジンによってスローされます。

この動作を防ぎ、エラーとエラー メッセージが オプション パラメータの muteHttpExceptions プロパティを UrlFetchApp.fetch。例:

const params = {
  muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, params);
if (response.getResponseCode() >= 400) {
  // ... inspect error details...
}

一般的なステータス コード

  • 200 OK は成功を示します。レスポンスに想定する 次の点を考慮してください。

    • 一部の API では、リクエストするフィールドやレスポンスの形式を あります。詳しくは、API ドキュメントをご覧ください。
    • API には、呼び出し可能なリソースが複数ある場合があります。詳しくは、 別のリソースのほうが適しているかどうかを判断するために、 必要なデータが返されます。
    • コードの記述時から API が変更された可能性があります。詳しくは、 ドキュメントやデベロッパーにお問い合わせください。
  • 400 Bad Request は通常、 リクエストの形式や構造を指定します。まず API 仕様と比較し、 あります。詳細については、リクエストの検査をご覧ください。 リクエストを調べる方法です。

  • 401 Unauthorized は通常、データを提供または提供せずに API が呼び出されていることを意味します。 承認が正常に行われていることを確認できます。

    • API で Basic 認証を使用する場合は、Authorization ヘッダーを確認します。 リクエストで渡されます。
    • API で OAuth 2.0 を使用している場合は、アクセス トークンを取得していることを確認します。 署名なしトークンとして提供されます。
    • 承認に関するその他の違いについては、 認証情報が提供されることになります。
  • 403 Forbidden は、ユーザーにリソースに対する権限がないことを示します。 表示されます。

    • 必要な権限がユーザーに付与されていることを確認します。たとえば、 ファイルベースのリクエストで、ユーザーにファイルへのアクセス権を付与します。
  • 404 Not Found は、リクエストされたリソースが存在しないことを意味します。

    • API エンドポイントに使用される URL が正しいことを確認します。
    • リソースを取得する場合は、参照されているリソースが存在することを確認する (ファイルベースの API 用のファイルが存在する場合など)。

リクエストを検査する

リクエストを検査すると、API レスポンスでリクエストに問題があることが示された場合に有用です。 400 ステータス コードなどを返します。リクエストを調べるには、UrlFetchApp fetch() メソッドのコンパニオン メソッドである getRequest()

このメソッドは、サーバーにリクエストを送信するのではなく、 それが返されます。これにより、ユーザーは リクエストの要素を検査して、リクエストが正しく見えることを確認します。

たとえば、リクエストのフォームデータが、連結された多くの文字列で構成されている場合 フォームを生成するために作成した関数にエラーがある可能性があります。 分析できます最もシンプルな方法は以下のとおりです。

const request = UrlFetchApp.getRequest(url, params);
console.log(request);
// Now make the fetch:
const response = UrlFetchApp.fetch(url, params);
// ...

リクエストの要素を検査できます。

リクエストとレスポンスをログに記録する

リクエストとレスポンスを検査するプロセス全体を支援するために、 次のヘルパー関数をドロップイン関数として使用でき、 UrlFetchApp.fetch() を置き換えて、リクエストとレスポンスの両方をログに記録します。

  1. コード内の UrlFetchApp.fetch() のすべてのインスタンスを logUrlFetch()

  2. スクリプトの末尾に次の関数を追加します。

    function logUrlFetch(url, opt_params) {
      const params = opt_params || {};
      params.muteHttpExceptions = true;
      const request = UrlFetchApp.getRequest(url, params);
      console.log('Request:       >>> ' + JSON.stringify(request));
      const response = UrlFetchApp.fetch(url, params);
      console.log('Response Code: <<< ' + response.getResponseCode());
      console.log('Response text: <<< ' + response.getContentText());
      if (response.getResponseCode() >= 400) {
        throw Error('Error in response: ' + response);
      }
      return response;
    }
    

スクリプトを実行すると、すべてのリクエストとレスポンスの詳細が次のバケットに デバッグが簡単になります。