API Yetkilendirmesi

Uygulamanızı yetkilendirmek için OAuth 2.0 kullanın izin verir.

OAuth 2.0 kurulumu

OAuth 2.0, bir hizmet hesabı kullanarak kendinizi tanımlamanızı gerektirir. Google Hesabınızla ilişkilendirilmiş. Hizmet hesabı, gizli bilgilerinizi anahtarı kullanabilirsiniz. Ardından bu jetonu Fiyatlandırma, otel ve otel gibi salt okunur veriler için otel API'lerine yapılan çağrılar. Otel fiyatı feed'inizle ilgili teşhis raporu verileri.

Erişim jetonları bir saat (3.600 saniye) süreyle kullanılabilir.

Daha önce ClientLogin'i uyguladıysanız OAuth 2.0 yaklaşımı da buna benzerdir. şu farklılıklarla:

  • Uygulamanız API'ye erişmek için bir Google hizmet hesabı kullanır.
  • Aşağıdaki durumlarda Authorization HTTP başlığında bir OAuth 2.0 erişim jetonu iletirsiniz çağrı API'leri.

Hesabınızı Travel Partner API ile OAuth 2.0 kullanacak şekilde ayarlamak için şu adımları uygulayın:

  1. Google Developers Console'da (DevConsole) yeni bir proje oluşturma

  2. Yeni proje için Travel Partner API erişimini etkinleştirin

  3. Bir hizmet hesabı ve kimlik bilgileri oluşturma

  4. Hizmet hesabınızın otel verilerinize erişmesine izin verme

Bu adımların her biri sonraki bölümlerde açıklanmıştır.

1. Adım: Yeni bir DevConsole Projesi oluşturun

Google Developers Console ("DevConsole"), Google'ın geliştirici deneyimidir. Trafik verilerini, kimlik doğrulama ve fatura bilgilerini yönetmek ve görüntülemek için API'lerini kullanabilirsiniz.

DevConsole'da proje; ayarlar, kimlik bilgileri, ve meta veriler, bunların üzerinde çalıştığınız uygulama veya uygulamalarla ilgili Google Developer API'lerini ve Google Cloud kaynaklarını kullanır.

DevConsole, projenizin bu yönlerini yönettiğiniz yerdir. API kimlik bilgileri oluşturma, API'leri etkinleştirme, ekibi ve faturalandırmayı yönetme belirlemenize yardımcı olabilir.

Yeni bir DevConsole projesi oluşturmak için:

  1. Gmail/Google Hesabınızda oturum açın.

  2. Google Developers Console'u açın. Bu ilk projenizse ana görünümde bir basit CREATE PROJECT (PROJE OLUŞTUR) düğmesi:

    fig1

  3. PROJE OLUŞTUR düğmesini tıklayın. DevConsole, ekranda Yeni Proje iletişim kutusu:

    fig2

    Proje adı alanına yeni projeniz için kolay bir ad girin giriş alanına ekleyebilirsiniz. Alanın altında yer alan DevConsole sizin için bir proje kimliği oluşturur. Kimliğin tüm projelerde benzersiz olduğundan emin olun. Örneğin, “Yeni Projem” yazın, DevConsole my-new-project-266022

  4. Yeni projenizi oluşturmak için Create (Oluştur) düğmesini tıklayın.

  5. Gezinme menüsünü kullanarak API'ler ve Hizmetler > Kontrol Paneli.

    fig3

    Aşağıdaki resimde, DevConsole'a benzer. Bu işlem, projenizin Kontrol Paneli görünümünü gösterir:

    fig4

Daha fazla bilgi için Geliştiriciler bölümünde projeleri yönetme Konsol.

Yeni bir proje oluşturduğunuzda henüz bu projeyle ilişkilendirilmiş API yoktur. Sonraki adımda yeni Projeniz için Travel Partner API etkinleştireceksiniz.

2. Adım: Yeni proje için Travel Partner API özelliğini etkinleştirin

Otel API'lerini kullanmak için yeni DevConsole projenizde Travel Partner API özelliğini etkinleştirmeniz gerekir.

Yeni projenizde otel API'lerini etkinleştirmek için:

  1. Yukarıda açıklandığı şekilde projenizin Kontrol Paneli görünümüne gidin.

  2. API'leri ve Hizmetleri Etkinleştir'i tıklayın. API Kitaplığı karşılama mesajını görüntüler sayfasını ziyaret edin.

  3. Arama alanına Travel Partner API yazmaya başlayın. Google API Konsolu, yazdıklarınızla eşleşen API'lerin listesini gösterir.

  4. Eşleşen API'ler tablosunda Travel Partner API simgesini tıklayın. DevConsole API hakkında bir açıklama gösterir.

  5. Projenizde bu API'yi etkinleştirmek için API'yi Etkinleştir düğmesini tıklayın.

Daha fazla bilgi için Etkinleştirme ve devre dışı bırakma konusuna bakın. API'ler.

Otel API'leri artık Google Hesabınızın yeni projesi için etkinleştirildi.

Sonraki adım, bir hizmet hesabı ve hesap için anahtarlar oluşturmaktır.

3. Adım: Bir hizmet hesabı ve hesabın kimlik bilgilerini oluşturun

Hizmet hesapları, iki sunucu arasındaki etkileşimler gibi sunucudan sunucuya web uygulaması ve otel verileriniz.

Bir hizmet hesabı oluşturmak ve yapılandırmak için:

  1. Google API Konsolu ana görünümünde Kimlik bilgileri'ni tıklayın. kullanabilirsiniz. DevConsole, Kimlik Bilgileri görünümünü gösterir.

    Kimlik bilgileri görünümü, kimlik bilgilerinizin istemci kimliklerini ve kimlik bilgilerini belirler. Uygulamanız istekte bulunurken istemci kimliğini kullanacaktır. OAuth 2.0 erişim jetonu. Yeni projelerde müşterisi veya kimlik bilgisi bulunmaz (henüz).

  2. API'ler ve hizmetlerde kimlik bilgileri bağlantısını tıklayın.

  3. Create credentials (Kimlik bilgileri oluştur) düğmesini tıklayın ve Service account key (Hizmet hesabı anahtarı) seçeneğini belirleyin açılır menüden kullanabilirsiniz. Hizmet hesabı anahtarı oluştur görünümü görüntülenir.

  4. Hizmet hesabı açılır listesinden Yeni hizmet hesabı'nı seçin.

  5. Hizmet hesabı adı ve hizmet hesabı kimliği girin.

    Ad istediğiniz herhangi bir ad olabilir ancak hesap kimliği benzersiz olmalıdır etkili bir yoludur. DevConsole sizin için benzersiz bir hesap kimliği oluşturur. girdiğiniz ada göre değişir.

  6. Aşağıda gösterildiği gibi, anahtar türü için P12'yi seçin. P12 gereklidir.

    fig5

  7. Oluştur düğmesini tıklayın. DevConsole bir özel/ortak anahtar çifti oluşturur belirleneceğini konuşacağız. Özel anahtar, koleksiyonunuzdan tarayıcınız indirilenleri saklar. .json dosya biçiminin aksine .p12 biçimi (ikili).

    Komut dosyalarınızda veya erişen diğer uygulamalarda özel anahtarı kullanırsınız Travel Partner API.

    DevConsole, anahtarlar:

    fig6

  8. Tamam, anladım düğmesini tıklayın. DevConsole sizi Kimlik bilgileri görünümü. Hizmet hesabınızla ilgili ayrıntıları onaylamak ve projenizle ilişkilendirilen hizmet hesaplarını görmek için Yönet'i hizmet hesaplarını gözden geçirin.

    Hizmet hesabı, kendisiyle ilişkilendirilmiş aşağıdaki kimlik bilgilerine sahiptir:

    • İstemci kimliği: Uygulamanızın, OAuth 2.0 erişim jetonu isteme.
    • E-posta adresi: Hizmet hesabı için oluşturulan bir e-posta adresi form "account_name@account_name.google.com.iam.gserviceaccount.com".
    • Sertifika dijital parmak izleri: Oluşturduğunuz özel anahtarın kimliği indirildi.
ziyaret edin.

Daha fazla bilgi için Şu işlemleri gerçekleştirmek için Sunucu için OAuth 2.0'ı Kullanma: Sunucu Uygulamaları.

4. adım: Hizmet hesabının Hotel Center verilerinize erişmesine izin verin

Son adım, yeni hizmet hesabının Hotel Center'a gidin. Hizmet hesabı, oluşturulan e-posta adresine göre son adımdır. Bu hesaba erişim sağlamak için: Hotel Center paylaşım ayarlarına gidin.

Bir hizmet hesabının Hotel Center verilerinize erişmesine izin vermek için:

Hesaba kullanıcı eklemek için uygun erişim iznine sahip değilseniz Google Oteller Ekibi'nden bize ulaşın formunu kullanarak otelin sahipliğini ayarlamamızı ve oturum açın. Bir veya daha fazla e-posta adresinin sahibine gönderilmesini isteyebilirsiniz. Hotel Center'a erişim hakkında daha fazla bilgi için Hotel Center'ı bağlama ve Google Ads'e gidin.

  1. Yeni bir tarayıcı penceresinde Hotel Center'ı açın. fig7

  2. Hotel Center by Google banner'ında kullanıcı ekle simgesini tıklayarak açın. iletişim kutusu gösterilir.

    fig8

  3. Daha fazla kişi ekle alanına hizmetin e-posta adresini girin. Hotel Center hesabınıza eklemek istediğiniz hesaptır.

  4. Kullanıcıları bilgilendir seçeneğini işaretli bırakın.

  5. Açılır menüden Yönet'i seçin.

  6. Davet Et düğmesini tıklayın.

  7. Hotel Center'a kullanıcı ekledikten sonra hizmet hesabınız: yaklaşık 24 saat içinde API erişimi için etkinleştirilir.

Google, hizmetiniz için API erişiminin etkinleştirildiğini size bildirdikten sonra hesabınıza erişimi olanlar, API'ye OAuth ile erişmeye başlayabilirsiniz.

OAuth 2.0'ı kullanma

API'ya erişmek için uygulamanızın kendisini Google'a hizmet hesabının oluşturulan e-posta adresi ve özel anahtarı. Google'ın kimlik doğrulama mekanizması, bu anahtarı uygulamanızın API çağrılarında Authorization üstbilgisini iletirsiniz.

Erişim jetonları (hamiline ait jetonlar olarak da bilinir) OAuth 2.0'ın bir parçasıdır. standart. HTTP başlığında erişim jetonu belirtmek için kullanılan söz dizimi şöyledir:

Authorization: Bearer *oauth2_access_token*

Aşağıdaki örnekte Raporlar API'si:

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

Erişim jetonu oluşturmak için seçtiğiniz dilde bir uygulama oluşturun. Aşağıdaki örnek, jetonu Python'da oluşturur. Ardından bu jeton Travel Partner API erişiminde Authorization üstbilgileri.

#!/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>

Uygulamanızı geliştirirken En iyi uygulamalar API anahtarlarını güvenli bir şekilde kullanın.

Örnek Python komut dosyası, bir Authorization üstbilgisinin Taşıyıcısını çıkarır jetonuna sahip olmanız gerekir:

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

İsteklerinizde jetonun değerini kullanın. Arama işleminden sonra oluşturacağım.

Sorun giderme

Sorun mu yaşıyorsunuz? Aşağıdaki öğeleri hızlı bir şekilde kontrol etmek bu sorunu çözebilir düşünmeye başlamışsınızdır.

  1. Google Developers Console'da bir proje oluşturdunuz mu?
  2. Travel Partner API öğesini bulup etkinleştirdiniz mi?
  3. .p12 dosyası (tıkladıktan sonra gizli bir anahtar) indirdiniz mi? İstemci kimliği oluşturulsun ve Hizmet hesabı seçilsin mi?
  4. Hizmet hesabı istemci kimliği e-posta adresini şu şekilde aldınız mı: nnnnnnn@app_name.google.com.iam.gserviceaccount.com silinsin mi?
  5. Şu seçeneği tıklayarak Otel Reklamları Merkezi hesabınızı hizmet hesabıyla paylaştınız mı?: Bu hesabı paylaş düğmesi nedir?
  6. Hizmet hesabının e-posta adresini ve iş ortağı kimliğinizi Teknik Hesap Yöneticiniz (THY) ile görüşün.
  7. Travel Partner API çağrılarınız Authorization başlık mı?
  8. Authorization üst bilginizin hamiline ait jetonu 1 saatten eski mi?

Aşağıdaki tabloda, sık karşılaşılan bazı hatalar ve olası çözümleri listelenmiştir:

Hata Açıklama
Invalid credentials Bu, farklı anlamlara gelebilir. Bu hatayla karşılaşırsanız şunlardan emin olun:
  • Geçerli bir hamiline sahip olan bir Authorization başlığı belirttiniz jeton.
  • Hamiline ait jeton bir saatten kısa bir süre önce oluşturuldu. Jeton yalnızca bir saat süreyle kullanılabilir.
  • Doğru iş ortağı adını belirttiniz (partner ile sorgu dizesi parametresi) Değer, benzersiz iş ortağı kimliğinizdir, kimliğiniz değildir. Otel Reklamları Merkezi'nde görünen iş ortağı adıdır. Arkadaşınızı bilmiyorsanız Teknik Hesap Yöneticinizle (THY) iletişime geçin.
Not found Uç noktanız büyük olasılıkla bozuk. Doğrulama işlemi için GET isteği ve istek URL'sinin geçerli olduğunu ( söz konusu API söz dizimini kullandığınızdan emin olun.
Invalid string value Uç noktanın bir veya daha fazla bölümü geçersiz söz dizimi içeriyor. Örneğin, yolun bir kısmını yanlış yazmış olabilirsiniz. Doğru depolama alanını kullandığınızdan emin olun alt çizgi, büyük harf ve kelimeler kullanmaktan kaçının.
Unsupported output format Bu hata en çok Reports API kullanılırken ortaya çıkar. Şunu yapmalısınız: GET öğenizin URL'sinde "alt=csv" değerini belirtin isteğinde bulunabilirsiniz. Reports API, JSON'u desteklemez.
AccessTokenRefreshError/Invalid grant Örnek Python uygulamasını çalıştırırken bu hatanın nedeni aşağıdakilerden biri olabilir: şunlardan biri:
  • Hizmet hesabı e-posta adresiniz yanlış. E-postayı kontrol edin hesabı Google Developers Console'da API'ye gidin.
  • E-posta adresinin API erişimi yok. E-postanın adresinin otel verilerinize erişme yetkisi olmalıdır (Hotel Center üzerinden paylaşılır).
  • Anahtar dosyası, hizmet hesabı için doğru dosya değil. Şunu kullanın: DevConsole'u kullanarak yeni bir .p12 sertifikası indirin ve Python uygulamanız doğru olanı işaret ediyor.
HotelAdsAPIConnection object has no attribute credentials Örnek Python uygulamasını çalıştırırken .p12 yolunuz dosyası yanlış.
Invalid scope Örnek Python uygulamasını çalıştırırken API kapsamı https://www.googleapis.com/auth/travelpartner
Forbidden Kullandığınız hesap kimliği, yetkinizin olmadığı bir hesap tıklayın. Bir alt hesap sahibiyseniz erişimi kaybettiğiniz durumlara üst veya kök hesap kimliği.