このドキュメントでは、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 アクセス トークンを渡します。
Hotels API で OAuth 2.0 を使用するようにアカウントを設定するには、次の手順を行います。
それぞれの手順は、次のセクションで説明します。
ステップ 1: Google Cloud コンソールで新しいプロジェクトを作成する
Google Cloud コンソールを使用すると、プロジェクトで使用する Google API のトラフィック データ、認証情報、請求情報を管理および表示できます。
Google Cloud コンソールで、プロジェクトは、Google Developer API と Google Cloud リソースを使用するアプリケーションに関する設定、認証情報、メタデータのコレクションです。
Google Cloud コンソールでは、API 認証情報の生成、API の有効化、プロジェクトに関連付けられたチームと請求情報の管理にも使用できます。
Google Cloud コンソールで新しいプロジェクトを作成するには:
Gmail または Google アカウントにログインします。
Google Cloud コンソールを開きます。初めてのプロジェクトの場合は、メインビューに [プロジェクトを作成] ボタンが表示されます。
[プロジェクトの作成] ボタンをクリックします。Google Cloud コンソールに [新しいプロジェクト] ダイアログが表示されます。
[プロジェクト名] 入力フィールドに、新しいプロジェクトのわかりやすい名前を入力します。Google Cloud コンソールでは、このフィールドの下にプロジェクト ID が生成されます。この ID は、すべてのプロジェクトで一意になります。たとえば、「My New Project」と入力すると、Google Cloud コンソールによって
my-new-project-266022
などの ID が割り当てられます。[作成] ボタンをクリックして、新しいプロジェクトを作成します。
ナビゲーション メニューで、[API とサービス] > [ダッシュボード] を選択します。
次の図は、Google Cloud コンソールの左上にあるナビゲーション メニューを示しています。プロジェクトの [ダッシュボード] ビューが表示されます。
詳細については、プロジェクトの作成と管理をご覧ください。
ステップ 2: サービス アカウントを作成し、認証情報を生成する
サービス アカウントは、ウェブ アプリケーションとホテルデータ間のサーバー間通信で使用されます。
サービス アカウントを作成して構成するには、次の手順を行います。
Google API Console のメインビューで、左側のナビゲーションで [認証情報] をクリックします。Google Cloud コンソールに [認証情報] ビューが表示されます。
[認証情報] ビューには、プロジェクトのクライアント ID と認証情報が表示されます。アプリケーションは、OAuth 2.0 アクセス トークンをリクエストするときにクライアント ID を使用します。新しいプロジェクトには、まだクライアントや認証情報がありません。
[API とサービスの認証情報] リンクをクリックします。
[認証情報を作成] ボタンをクリックし、フィルタから [サービス アカウント キー] を選択します。[サービス アカウント キーの作成] ビューが表示されます。
[サービス アカウント] フィルタから [新しいサービス アカウント] を選択します。
サービス アカウント名とサービス アカウント ID を入力します。
名前は任意ですが、アカウント ID はすべてのプロジェクトで一意である必要があります。Google Cloud コンソールでは、入力した名前に基づいて一意のアカウント ID が生成されます。
キーのタイプとして [JSON] を選択します。JSON は必須です。
[Create] ボタンをクリックします。Google Cloud コンソールで、プロジェクトの秘密鍵または公開鍵ペアが生成されます。秘密鍵は、ブラウザがダウンロードを保存するデフォルトの場所に保存されます。
.JSON
形式のファイルをダウンロードする必要があります。秘密鍵は、API にアクセスするスクリプトやその他のアプリケーションで使用します。
キーの生成が完了すると、Google Cloud コンソールに「サービス アカウントが作成されました」というメッセージが表示されます。
[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 データへのアクセス権を付与するには:
新しいブラウザ ウィンドウで ホテル センターを開きます。
[Hotel Center by Google] バナーで、ユーザーの追加アイコンをクリックして共有ダイアログを開きます。
[ユーザーを追加] フィールドに、Hotel Center に追加するサービス アカウントのメールアドレスを入力します。
[通知を送信する] オプションを選択したままにします。
フィルタから [管理] を選択します。
[招待] ボタンをクリックします。
Hotel Center にユーザーを追加すると、サービス アカウントが API アクセス用に有効になり、約 24 時間以内に有効になります。
サービス アカウントで API アクセスが有効になったことを Google から通知されたら、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 へのアクセスを有効にします。
プロジェクトのダッシュボード ビューに移動します。
[API とサービスを有効化] をクリックします。API ライブラリのウェルカム ページが表示されます。
検索フィールドに「Travel Partner API」と入力すると、入力内容に一致する API のリストがコンソールに表示されます。
表で一致する API をクリックします。Google Cloud コンソールに、その API の説明が表示されます。
[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 の認可手順には重要な違いがあります。
パートナーは、OAuth 2.0 の設定に記載されている手順と同じ手順で、Google Cloud コンソールで新しい料金フィード OAuth2.0 プロジェクトを作成する必要があります。
Google Cloud コンソールで Price Feeds API を有効にすることはNOT。無視してもかまいません。必要なサービス アカウントとキーは 1 つだけです。同じサービス アカウントとキーを使用して、料金フィード プロジェクトに Hotel Center データへのアクセス権を付与します。OAuth2.0 の設定で説明されている残りの手順に沿って、API の構成を完了します。
料金フィードの OAuth2.0 アクセス トークンを取得する
次のステップでは、サービス アカウント キーファイルを使用して、宿泊料金アップロード スコープの OAuth2.0 アクセス トークンを取得します。委任された API 呼び出しを行う準備の手順に沿って、料金フィード プロジェクトへのリクエストを承認し、取得した認証情報からアクセス トークンを抽出して "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 設定をテストする
OAuth2.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 |
トラブルシューティング
問題が発生した場合は、次の項目を簡単に確認することで、問題が解決することがあります。
- Google Cloud コンソールでプロジェクトを作成しましたか?
- プロジェクトでサービスを有効にしましたか?
- [クライアント ID を作成] をクリックして [サービス アカウント] を選択した後、
.JSON
ファイル(秘密鍵)をダウンロードしましたか? nnnnnnn@app_name.google.com.iam.gserviceaccount.com
という形式のサービス アカウント クライアント ID のメールアドレスを取得しましたか?- [このアカウントを共有] ボタンをクリックして、Hotel Ads Center アカウントをサービス アカウントと共有しましたか?
- サービス アカウントのメールアドレスとパートナー ID をテクニカル アカウント マネージャー(TAM)に送信しましたか?
- API 呼び出しで、最近取得したトークンが
Authorization
ヘッダーで渡されていますか? - トークンが 1 時間以上経過していますか?
次の表に、一般的なエラーとその解決策を示します。
エラー | 説明 |
---|---|
Invalid credentials | このメッセージが表示される原因はいくつか考えられます。このエラーが発生した場合は、次の点を確認してください。
|
Not found | エンドポイントの形式が正しくありません。GET リクエストを送信していること、リクエスト URL が有効であること(アクセスしようとしている API 構文に準拠していること)を確認します。 |
Invalid string value | エンドポイントの 1 つ以上の部分に無効な構文が含まれています。たとえば、パスの一部にスペルミスがある可能性があります。パス全体で、アンダースコア、大文字、単語が正しく使用されていることを確認します。 |
Unsupported output format | このエラーは、Reports API を使用している場合によく発生します。GET リクエストの URL に "alt=csv" を指定する必要があります。Reports API は JSON をサポートしていません。 |
AccessTokenRefreshError/Invalid grant | アプリの実行時にこのエラーが発生する原因として、次のことが考えられます。
|
HotelAdsAPIConnection object has no attribute credentials | アプリの実行時に、.JSON ファイルのパスが正しくない。 |
Invalid scope | アプリを実行する際の API スコープは、次のいずれかである必要があります。
|
Forbidden | 使用しているアカウント ID にアクセスする権限がない。サブアカウントの所有者は、親アカウントまたはルート アカウント ID にアクセスできない場合があります。 |