API の承認

このドキュメントでは、Travel Partner API や Price Feeds API などのホテル API にアクセスする際に、アプリケーションで OAuth2.0 を設定する手順について説明します。アプリケーションを承認するには、OAuth 2.0 を使用して Google API にアクセスするをご覧ください。

OAuth 2.0 のセットアップ

OAuth 2.0 では、Google アカウントに関連付けられたサービス アカウントを使用して本人確認を行う必要があります。サービス アカウントは、OAuth 2.0 アクセス トークンと引き換えに秘密鍵を送信します。このトークンは、宿泊料金フィードに関する料金、ホテル、診断レポートデータなどの読み取り専用データについて、ホテル API を呼び出す際に使用できます。

アクセス トークンの有効期間は 1 時間(3,600 秒)です。

以前に ClientLogin を実装したことがある場合、OAuth 2.0 のアプローチは似ていますが、次の点が異なります。

  • アプリケーションは Google サービス アカウントを使用して API にアクセスします。
  • API を呼び出すときに、Authorization HTTP ヘッダーで OAuth 2.0 アクセス トークンを渡します。

ホテル API で OAuth 2.0 を使用するようにアカウントを設定するには、次の手順を行います。

  1. Google Cloud コンソールで新しいプロジェクトを作成する

  2. サービス アカウントと認証情報を作成する

  3. サービス アカウントにホテルデータへのアクセス権を付与する

それぞれの手順は、次のセクションで説明します。

ステップ 1: 新しい Google Cloud コンソール プロジェクトを作成する

Google Cloud コンソールは、プロジェクトで使用する Google API のトラフィック データ、認証、課金情報を管理および表示するために使用されます。

Google Cloud コンソールでは、プロジェクトは、Google Developer API と Google Cloud リソースを使用するアプリケーションの設定、認証情報、メタデータのコレクションです。

Google Cloud コンソールは、API 認証情報の生成、API の有効化、プロジェクトに関連付けられたチームと請求情報の管理にも使用されます。

新しい Google Cloud コンソール プロジェクトを作成するには:

  1. Gmail または Google アカウントにログインします。

  2. Google Cloud コンソールを開きます。初めてプロジェクトを作成する場合は、メインビューに [CREATE PROJECT] ボタンが表示されます。

    fig1

  3. [プロジェクトを作成] ボタンをクリックします。Google Cloud コンソールに [新しいプロジェクト] ダイアログが表示されます。

    fig2

    [プロジェクト名] 入力フィールドに、新しいプロジェクトのわかりやすい名前を入力します。フィールドの下に、Google Cloud コンソールによってプロジェクト ID が生成されます。この ID はすべてのプロジェクトで一意になります。たとえば、「My New Project」と入力すると、Google Cloud コンソールは my-new-project-266022 のような ID を割り当てます。

  4. [作成] ボタンをクリックして、新しいプロジェクトを作成します。

  5. ナビゲーション メニューで、[API とサービス] > [ダッシュボード] を選択します。

    fig3

    次の図は、Google Cloud コンソールの左上にあるナビゲーション メニューを示しています。プロジェクトの [ダッシュボード] ビューが表示されます。

    fig4

詳細については、プロジェクトの作成と管理をご覧ください。

ステップ 2: サービス アカウントを作成して認証情報を生成する

サービス アカウントは、ウェブ アプリケーションとホテルのデータ間のやり取りなど、サーバー間のやり取りで使用されます。

サービス アカウントを作成して構成するには、次の手順を行います。

  1. Google API コンソールのメインビューで、左側のナビゲーションにある [認証情報] をクリックします。Google Cloud コンソールに [認証情報] ビューが表示されます。

    [認証情報] ビューには、プロジェクトのクライアント ID と認証情報が表示されます。アプリケーションは、OAuth 2.0 アクセス トークンをリクエストするときにクライアント ID を使用します。新しいプロジェクトには、まだクライアントや認証情報がありません。

  2. [API とサービスの認証情報] リンクをクリックします。

  3. [認証情報を作成] ボタンをクリックし、フィルタから [サービス アカウント キー] を選択します。[サービス アカウント キーの作成] ビューが表示されます。

  4. [サービス アカウント] フィルタで、[新しいサービス アカウント] を選択します。

  5. サービス アカウント名とサービス アカウント ID を入力します。

    名前は任意ですが、アカウント ID はすべてのプロジェクトで一意である必要があります。入力した名前に基づいて、一意のアカウント ID が生成されます。

  6. キーのタイプとして [JSON] を選択します。JSON が必要です

  7. [Create] ボタンをクリックします。Google Cloud コンソールは、プロジェクトの秘密鍵と公開鍵のペアを生成します。秘密鍵は、ブラウザがダウンロードを保存するデフォルトの場所に保存されます。.JSON 形式のファイルをダウンロードする必要があります

    API にアクセスするスクリプトや他のアプリケーションで秘密鍵を使用します。

    キーの生成が完了すると、Google Cloud コンソールに「サービス アカウントが作成されました」というメッセージが表示されます。

  8. [OK] ボタンをクリックします。Google Cloud コンソールが [認証情報] ビューに戻ります。サービス アカウントの詳細を確認し、プロジェクトに関連付けられているサービス アカウントを表示するには、このビューで [サービス アカウントの管理] をクリックします。

    サービス アカウントには、次の認証情報が関連付けられています。

    • クライアント ID: アプリケーションが OAuth 2.0 アクセス トークンをリクエストするときに使用する一意の識別子。
    • メールアドレス: サービス アカウント用に生成されたメールアドレス。形式は「account_name@project_name.google.com.iam.gserviceaccount.com」です。
    • 証明書のフィンガープリント: ダウンロードした秘密鍵の ID。

詳細については、サーバー間アプリケーションでの OAuth 2.0 の使用をご覧ください。

ステップ 3: サービス アカウントに Hotel Center のデータへのアクセス権を付与する

最後の手順として、新しいサービス アカウントに Hotel Center へのアクセス権を付与します。サービス アカウントは、前の手順で作成した生成済みメールアドレスで識別されます。このアカウントへのアクセス権は、Hotel Center の共有設定を使用して付与します。

アカウントにユーザーを追加する権限がない場合は、お問い合わせフォームを使用して Google ホテルチームに連絡し、アカウントの所有権の設定をリクエストしてください。オーナーに 1 通以上のメールを送信するようリクエストできます。Hotel Center のアクセス権について詳しくは、Hotel Center と Google 広告をリンクするをご覧ください。

サービス アカウントに Hotel Center データへのアクセス権を付与するには:

  1. 新しいブラウザ ウィンドウで Hotel Center を開きます。fig7

  2. [Hotel Center by Google] バナーで、ユーザーを追加アイコンをクリックして共有ダイアログを開きます。

    fig8

  3. [ユーザーを追加] フィールドに、Hotel Center に追加するサービス アカウントのメールアドレスを入力します。

  4. [ユーザーに通知する] オプションを選択したままにします。

  5. フィルタから [管理] を選択します。

  6. [招待] ボタンをクリックします。

  7. Hotel Center にユーザーを追加すると、約 24 時間以内にサービス アカウントで API アクセスが有効になります。

Google からサービス アカウントの API アクセスが有効になったという通知が届いたら、OAuth 2.0 を使用して API へのアクセスを開始できます。

OAuth 2.0 の使用方法

API にアクセスするには、アプリケーションがサービス アカウントの生成されたメールアドレスと秘密鍵を使用して Google に自身を識別する必要があります。Google の認証メカニズムは、このキーを OAuth 2.0 アクセス トークンと交換します。このトークンは、アプリの API 呼び出しの Authorization ヘッダーで渡します。

委任された API 呼び出しを行う準備を参照してください。

スコープ

Hotels API の SCOPES は次のとおりです。

Travel Partner API: "https://www.googleapis.com/auth/travelpartner"

Price Feeds API: "https://www.googleapis.com/auth/travel-partner-price-upload"

認証情報を作成するときに、サービス アカウントを指定する必要があります。サービス アカウントを作成して認証情報を生成するをご覧ください。

アプリケーションを開発する際は、API キーを使用してアプリケーションを認証するためのベスト プラクティスに沿って対応してください。詳細

from google.oauth2 import service_account
from google.auth.transport.requests import Request

# You can use a single or multiple scopes
SCOPES =
['https://www.googleapis.com/auth/travel-partner-price-upload','https://www.googleapis.com/auth/travelpartner']
SERVICE_ACCOUNT_FILE = 'service_account_key_file.json'

cred = service_account.Credentials.from_service_account_file(
                        SERVICE_ACCOUNT_FILE,
                        scopes=SCOPES)
cred.refresh(Request())
headers = {}
cred.apply(headers)

Travel Partner API

宿泊施設パートナーは、Travel Partner API を使用して、Hotel Center の情報を取得したり、Hotel Center のデータを変更したりして、大規模または複雑なアカウントを管理できます。

OAUTH 2.0 の設定の手順に沿って、Travel Partner API の認可を取得します。

Travel Partners API の新しいプロジェクトを作成する場合は、新しい Google Cloud コンソール プロジェクトへのアクセスを有効にする必要があります。

Travel Partners API へのアクセスを有効にする手順は次のとおりです。

  1. プロジェクトのダッシュボード ビューに移動します。

  2. [API とサービスを有効化] をクリックします。API ライブラリのウェルカム ページが表示されます。

  3. 検索フィールドに「Travel Partner API」と入力すると、入力内容に一致する API のリストがコンソールに表示されます。

  4. 表で、一致する API をクリックします。Google Cloud コンソールに、その API の説明が表示されます。

  5. [API を有効にする] ボタンをクリックして、プロジェクトでこの API を有効にします。

詳細については、サービスの有効化と無効化をご覧ください。

これで、Google アカウントの新しいプロジェクトで Travel Partner API が有効になりました。

Travel Partner API のスコープは次のとおりです。 "https://www.googleapis.com/auth/travelpartner"

Travel Partner API のエンドポイントは次のとおりです。 "https://travelpartner.googleapis.com/v3/accounts/<account_id>/<path>"

Price Feeds API

宿泊施設のパートナーは、Price Feeds API を使用して、ホテルごとにカスタマイズされた料金データを提供できます。Google の宿泊施設パートナーは、Google に料金をアップロードする際に、OAuth2.0 を使用して認証と認可を行うことができます。OAUTH 2.0 の設定手順に沿って、Price Feeds API の承認を取得します。

重要なポイント

Price Feeds API の認可手順には重要な違いがあります。

  1. パートナーは、OAuth 2.0 の設定で説明されている手順に沿って、Google Cloud コンソールで新しい Price Feeds OAuth2.0 プロジェクトを作成する必要があります。

  2. Google Cloud コンソールで Price Feeds API を有効にする必要はありません。無視してかまいません。必要なサービス アカウントとキーは 1 つだけです。同じサービス アカウントとキーを使用して、Price Feeds プロジェクトに Hotel Center データへのアクセス権を付与します。OAuth2.0 の設定で説明されている残りの手順に沿って、API の構成を完了します。

価格フィードの OAuth2.0 アクセス トークンを取得する

次のステップでは、サービス アカウント キーファイルを使用して、宿泊料金のアップロード スコープで OAuth2.0 アクセス トークンを取得します。委任された API 呼び出しを行う準備の手順に沿って Price Feeds プロジェクトへのリクエストを承認し、取得した認証情報からアクセス トークンを抽出して "Authorization" HTTP ヘッダーに設定します。

宿泊料金のアップロードの範囲は次のとおりです。 "https://www.googleapis.com/auth/travel-partner-price-upload"

料金をアップロードする

アクセス トークンを取得した後、パートナーは、認証と認可に静的 IP を使用する場合と同様に、次の変更を加えて価格フィードをアップロードできます。

  • "Authorization" HTTP ヘッダーでアクセス トークンを設定する
curl -X POST -H "Authorization: Bearer <access token>"
www.google.com/travel/lodging/uploads/accounts/<account_id>/ota/hotel_rate_amount_notif --data-binary @<price_feed_file_location>

Price Feeds API の OAuth2.0 設定をテストする

OAuth 2.0 の設定をテストするには、空のファイルまたは実際の価格データをアップロード パスのいずれかにアップロードします。この表を使用して、HTTP レスポンスのステータスを確認します。

HTTP レスポンス ステータス メッセージ
200 Successful (OK)
401 Service account creation or access token fetch was not successful
403 Service account access wasn't granted to the Hotel Center account or both the service account key and access token has expired

トラブルシューティング

問題が発生した場合は、次の項目を簡単に確認することで、問題を解決できる場合があります。

  1. Google Cloud コンソールでプロジェクトを作成しましたか?
  2. プロジェクトでサービスを有効にしましたか?
  3. [クライアント ID を作成] をクリックして [サービス アカウント] を選択した後、.JSON ファイル(秘密鍵)をダウンロードしましたか?
  4. nnnnnnn@app_name.google.com.iam.gserviceaccount.com という形式のサービス アカウント クライアント ID のメールアドレスを取得しましたか?
  5. [このアカウントを共有] ボタンをクリックして、Hotel Ads Center アカウントをサービス アカウントと共有しましたか?
  6. サービス アカウントのメールアドレスとパートナー ID をテクニカル アカウント マネージャー(TAM)に送信しましたか?
  7. API 呼び出しで、最近取得したトークンを Authorization ヘッダーで渡していますか?
  8. トークンの有効期限が 1 時間以上経過しているかどうかを確認します。

次の表に、一般的なエラーと解決策を示します。

エラー 説明
Invalid credentials このメッセージが表示される原因はいくつか考えられます。このエラーが発生した場合は、次のことを確認してください。
  • 有効な署名なしトークンを含む Authorization ヘッダーを指定した。
  • ベアラートークンが 1 時間以内である。トークンは 1 時間のみ有効です。
  • 正しいパートナー名を指定した(partner クエリ文字列パラメータを使用)。値は、Hotel Ads Center に表示されるパートナー名ではなく、一意のパートナー ID です。パートナー ID がわからない場合は、テクニカル アカウント マネージャー(TAM)にお問い合わせください。
Not found エンドポイントが正しくない可能性があります。GET リクエストを送信していること、リクエスト URL が有効であること(アクセスしようとしている API の構文に準拠していること)を確認します。
Invalid string value エンドポイントの 1 つ以上の部分に無効な構文が含まれています。たとえば、パスの一部が誤って入力されている可能性があります。パス全体で、アンダースコア、大文字、小文字、文言が正しく使用されていることを確認します。
Unsupported output format このエラーは、Reports API を使用しているときによく発生します。GET リクエストの URL で "alt=csv" を指定する必要があります。Reports API は JSON をサポートしていません。
AccessTokenRefreshError/Invalid grant アプリの実行時にこのエラーが発生する原因として、次のことが考えられます。
  • サービス アカウントのメールアドレスが正しくありません。Google Cloud コンソール でメール アカウントを確認し、API へのアクセスが承認されていることを確認します。
  • メールアドレスに API アクセス権がない。Hotel Center を通じて共有されたホテルデータにアクセスする権限がメールアドレスに付与されているかどうかを確認します。
  • キーファイルがサービス アカウントの正しいものではありません。Google Cloud コンソールを使用して新しい .JSON 証明書をダウンロードし、アプリが正しい証明書を指していることを確認します。
HotelAdsAPIConnection object has no attribute credentials アプリの実行時に、.JSON ファイルのパスが正しくない。
Invalid scope アプリを実行する場合、API スコープは次のいずれかである必要があります。
  • "https://www.googleapis.com/auth/travelpartner"
  • "https://www.googleapis.com/auth/travel-partner-price-upload"
Forbidden 使用しているアカウント ID にアクセスする権限がない。サブアカウントの所有者は、親アカウントまたはルートアカウントの ID にアクセスできない場合があります。