API の承認

OAuth 2.0 を使用してアプリケーションを承認する アクセスする必要があります

OAuth 2.0 のセットアップ

OAuth 2.0 では、サービス アカウントを使用して本人確認を行う必要があります アクセスできます。サービス アカウントは、プライベート OAuth 2.0 アクセス トークンと交換できます。その後、このトークンを 読み取り専用データ(料金、ホテル、ホテル物件など)の ホテル料金フィードに関する診断レポートデータです。

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

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

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

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

  1. Google Developers Console(DevConsole)で新しいプロジェクトを作成する

  2. 新しいプロジェクトで Travel Partner API へのアクセスを有効にする

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

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

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

ステップ 1: 新しい DevConsole プロジェクトを作成する

Google Developers Console(「DevConsole」)は Google のデベロッパー エクスペリエンスです。 トラフィック データ、認証情報、請求情報を管理、表示する プロジェクトで使用する Google API の IAM ロールを管理できます。

DevConsole において、プロジェクトとは、設定、認証情報、 作業中のアプリケーションに関するメタデータを Google Developer API と Google Cloud リソースを使用します。

DevConsole では、次のようなプロジェクトの各側面を管理します。 API 認証情報の生成、API の有効化、チームと請求の管理 情報を記録します。

新しい DevConsole プロジェクトを作成するには:

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

  2. Google Developer Console を開きます。プロジェクトを初めて作成する場合は、メインビューに シンプルな [CREATE PROJECT] ボタンを使用します。

    fig1

  3. [プロジェクトを作成] ボタンをクリックします。すると DevConsole に [New Project] ダイアログ ボックス:

    fig2

    [プロジェクト名] に新しいプロジェクトのわかりやすい名前を入力します。 表示されます。この欄でプロジェクト ID が生成されます。 ID がすべてのプロジェクトで一意であることを確認します。たとえば 「My New Project」と入力すると、DevConsole で my-new-project-266022

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

  5. ナビゲーション メニューから [API とサービス >ダッシュボードをご覧ください。

    fig3

    以下の画像は、画面左上のナビゲーション メニューを示しています。 見てみましょう。これにより、プロジェクトの [ダッシュボード] ビューが表示されます。

    fig4

詳しくは、Manage projects in the Developers コンソールで確認できます。

新しいプロジェクトを作成しても、まだ API は関連付けられていません。 次のステップでは、新しいプロジェクトで Travel Partner API を有効にします。

ステップ 2: 新しいプロジェクトで Travel Partner API を有効にする

Hotel API を使用するには、新しい DevConsole プロジェクトで Travel Partner API を有効にする必要があります。

新しいプロジェクトで Hotel API を有効にするには:

  1. 上記の手順でプロジェクトの [ダッシュボード] ビューに移動します。

  2. [API とサービスの有効化] をクリックします。[API ライブラリのようこそ] が表示されます。 できます。

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

  4. 一致する API の表で Travel Partner API をクリックします。DevConsole API の説明が表示されます。

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

詳しくは、有効化と無効化を行う API

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

次に、サービス アカウントを作成し、そのキーを生成します。

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

サービス アカウントは、サーバー間のやり取りなど、 ウェブ アプリケーションとホテルデータの両方を作成します。

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

  1. Google API Console のメインビューで、ブラウザの [認証情報] をクリックします。 アクセスできます。DevConsole に [認証情報] ビューが表示されます。

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

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

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

  4. [サービス アカウント] プルダウンから、[新しいサービス アカウント] を選択します。

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

    任意の名前を指定できますが、アカウント ID は一意である必要があります 自動的に適用されます。DevConsole によって一意のアカウント ID が生成され、 自動的に作成されます。

  6. 以下に示すように、鍵のタイプとして [P12] を選択します。P12 は必須です

    fig5

  7. [Create] ボタンをクリックします。DevConsole が秘密鍵と公開鍵のペアを生成する 選択します。秘密鍵は、デフォルトの場所に保存されます。 ダウンロード情報がブラウザに保存されます .json ファイル形式ではなく .p12 形式(バイナリ)形式にする必要があります

    秘密鍵は、アクセスするスクリプトやアプリケーション内で使用する Travel Partner API

    DevConsole に ID の生成が完了すると、次の通知が表示されます。 keys:

    fig6

  8. [OK] ボタンをクリックします。すると DevConsole に [認証情報] ビュー。サービス アカウントの詳細を確認し、 プロジェクトに関連付けられたサービス アカウントを表示し、[管理 サービス アカウント

    これで、サービス アカウントに次の認証情報が関連付けられました。

    • クライアント ID: 次の場合にアプリケーションが使用する一意の識別子。 OAuth 2.0 アクセス トークンをリクエストします。
    • メールアドレス: サービス アカウントに生成されたメールアドレス( フォーム "account_name[アカウント名]@account_name[プロジェクト名].google.com.iam.gserviceaccount.com
    • 証明書フィンガープリント: 使用する秘密鍵の ID ダウンロードされます。
で確認できます。

詳しくは、Using OAuth 2.0 for Server to サーバー アプリケーションをご覧ください。

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

最後のステップでは、新しいサービス アカウントに、 Hotel Center生成されたメールアドレスで識別され、 前のステップで作成したものが表示されます。このアカウントへのアクセスには、 Hotel Center の共有設定。

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

ユーザーをアカウントに追加するための適切なアクセス権がない場合は、 Google ホテルチームにはお問い合わせフォームを使用して、 ログインします。オーナー宛てのメールをリクエストできます。 Hotel Center へのアクセスについて詳しくは、Hotel Center と Google 広告

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

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

    fig8

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

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

  5. プルダウン メニューから [管理] を選択します。

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

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

サービスの API アクセスが有効になったことを Google が通知した後 OAuth を使用して API にアクセスできます。

OAuth 2.0 の使用

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

アクセス トークン(署名なしトークンとも呼ばれます)は OAuth 2.0 あります。HTTP ヘッダーでアクセス トークンを指定する構文は次のとおりです。

Authorization: Bearer *oauth2_access_token*

次の例は、API リクエストにアクセスするリクエストの HTTP ヘッダーのサンプルを Reports API:

GET /travelpartner/v2.0/42000042/reports/top_opportunity_7_day HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer nd42.fdLSKkljD98344444444444lSDF42fdLSKkljD98344444444444lSDF42
Cache-Control: no-cache

アクセス トークンを生成するには、任意の言語でアプリケーションを作成します。 次の例では、Python でトークンを生成します。この リクエストのトークンをTravel Partner API にアクセスする際の Authorization ヘッダー。

#!/usr/bin/python2.7
#
""" Sample code to get an auth header that you can use in your HTTP requests
    1. Please see https://developers.google.com/api-client-library/python/start/installation
       to download and install the google-api-python-client package.
    2. Edit lines below marked _SERVICE_ACCOUNT, _KEY_FILE,  _PARTNER_NAME,
       and _API_VERSION.
    3. Run the program using: "python sample.py". The app returns the value that
       you use for the Authorization header's Bearer token in your request.
    4. Copy the token and use it in requests to the Travel Partner API.
       For example (2.0):
       https://www.googleapis.com/travelpartner/2.0/42000042/reports/budget
       For example (1.x):
       https://www.googleapis.com/travelpartner/1.2/reports?report_type=BUDGET
"""
import httplib2
import json
import os
import sys
import urllib

HAS_CRYPTO = False

from apiclient import discovery
from oauth2client.client import flow_from_clientsecrets
try:
  # Some systems may not have OpenSSL installed so can't use SignedJwtAssertionCredentials.
  from oauth2client.client import SignedJwtAssertionCredentials
  HAS_CRYPTO = True
except ImportError:
  print "Unable to import SignedJwtAssertionCredentials"

from oauth2client import tools
from oauth2client.file import Storage

# Authorization scope for our requests (do not change)
_DEFAULT_APISCOPE = 'https://www.googleapis.com/auth/travelpartner'

# Use the service account you set up in the Google Developers Platform.
# It will be of the form "gsaccount_name@project_name.google.com.iam.gserviceaccount.com".
_SERVICE_ACCOUNT = ('myserviceaccount@my-hotel-project.google.com.iam.gserviceaccount.com')

# Set this to the full path to your service account's private binary .p12 key file
# that you downloaded from the Google Developer's Console and stored in a secure place.
# DO NOT use the json version of the certificate.
_KEY_FILE = '../mylocaldir/api-keys/8482bb2bdb08.p12'

# Set this to the case-sensitive "Partner Key", NOT the account
# name in the Hotel Ads Center or the numeric partner ID.
# Check with your TAM if you do not know your "Partner Key" name.
_PARTNER_NAME = 'testpartner2'

class HotelAdsAPIConnection(object):
  def __init__(self, service_account=_SERVICE_ACCOUNT, key=_KEY_FILE, partner=_PARTNER_NAME):
    self.key_file = key
    self.account = service_account
    self.partner = partner

  def InitializeCredentials(self, scope):
    '''Get credentials for use in API requests.
    Generates service account credentials if the key file is present,
    and regular user credentials if the file is not found.
    '''
    if os.path.exists(self.key_file):
      if not HAS_CRYPTO:
        raise Exception("Unable to use cryptographic functions "
                        + "Try installing OpenSSL")
      with open (self.key_file, 'rb') as file:
        key = file.read();
      creds = SignedJwtAssertionCredentials(self.account, key, scope)
      self.credentials = creds

  def authorize(self):
    '''Construct a HTTP client that uses the supplied credentials.'''
    return credentials.authorize(httplib2.Http())

  def print_creds(self):
    '''Prints the Authorization header to use in HTTP requests.'''
    cred_dict = json.loads(self.credentials.to_json())

    if 'access_token' in cred_dict:
      print 'Authorization: Bearer %s' % (cred_dict['access_token'],)
    else:
      print 'creds: %s' % (cred_dict,)

  def GetConnection(self):
    http = httplib2.Http()
    self.credentials.refresh(http)
    http = self.credentials.authorize(http)
    self.print_creds()
    return http

def main(args):
  # Create an instance of the HotelAdsAPIConnection inner class
  api = HotelAdsAPIConnection()

  # Generate credentials
  api.InitializeCredentials(_DEFAULT_APISCOPE)

  # Output the Authorization header to use in HTTP requests
  api.GetConnection()

if __name__ == "__main__":
    main(sys.argv)</pre>

アプリケーションを開発する際は、必ずベスト プラクティスに従い、 API キーを安全に使用するための推奨事項をご覧ください。

サンプル Python スクリプトが Authorization ヘッダーの Bearer を出力する トークンを渡します。

$ python sample.py
Authorization: Bearer ya29.42424242sample_420icu8122KSvoh4T42cRoG3rW1lc0Q
$

リクエストでこのトークンの値を使用します。録画を開始してから 1 時間は有効 生成します。

トラブルシューティング

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

  1. Google Developer Console でプロジェクトを作成した場合は、
  2. Travel Partner API を見つけて有効にしましたか?
  3. .p12 ファイル(クリックした後に秘密鍵)をダウンロードしましたか? クライアント ID を作成して [サービス アカウント] を選択します。
  4. 次の形式のサービス アカウントのクライアント ID メールアドレスを受け取りましたか? nnnnnnn@app_name.google.com.iam.gserviceaccount.com
  5. 次のボタンをクリックして、Hotel Ads Center アカウントをサービス アカウントと共有しましたか。 [このアカウントを共有] ボタンか?
  6. サービス アカウントのメールアドレスとパートナー ID の送信先は、 担当のテクニカル アカウント マネージャー(TAM)
  7. Travel Partner API の呼び出しで、最近取得したトークンを Authorization ヘッダー?
  8. Authorization ヘッダーの署名なしトークンから 1 時間以上経過していますか?

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

エラー 説明
Invalid credentials さまざまな原因が考えられます。このエラーが発生した場合は、次の点を確認してください。 <ph type="x-smartling-placeholder">
    </ph>
  • Authorization ヘッダーに有効な署名なしを指定しました あります。
  • 署名なしトークンが生成後 1 時間未満。トークンは 1 時間のみ有効です。
  • 正しいパートナー名を指定している(partner を使用) 。値は固有のパートナー ID であり、 Hotel Ads Center に表示されるパートナー名。パートナーが不明な場合 テクニカル アカウント マネージャー(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 サンプル Python アプリの実行時に、このエラーが次の原因により発生することがあります。 次の選択肢があります。 <ph type="x-smartling-placeholder">
    </ph>
  • サービス アカウントのメールアドレスが正しくありません。メールを確認する Google Developer Console にアクセスし、 API
  • このメールアドレスには API アクセス権限がありません。メールが 住所にホテルのデータへのアクセスが許可されている(Hotel Center で共有)。
  • 鍵ファイルがサービス アカウント用の正しいファイルではありません。こちらの 新しい .p12 証明書をダウンロードして、 Python アプリが適切なページを指し示しています。
HotelAdsAPIConnection object has no attribute credentials サンプル Python アプリの実行時の .p12 へのパス ファイルが正しくありません。
Invalid scope サンプル Python アプリの実行時は、API スコープを https://www.googleapis.com/auth/travelpartner
Forbidden 使用しているアカウント ID は権限のないアカウント ID です あります。サブアカウントの所有者は、 親アカウントまたはルートアカウント ID です