API Yetkilendirmesi

Otel API'lerine erişirken uygulamanızı yetkilendirmek için OAuth 2.0'ı kullanın.

OAuth 2.0 kurulumu

OAuth 2.0, Google Hesabınızla ilişkilendirilmiş bir hizmet hesabı kullanarak kendinizi tanıtmanızı gerektirir. Hizmet hesabı, bir OAuth 2.0 erişim jetonu karşılığında özel anahtarınızı gönderir. Ardından bu jetonu, otel fiyat feed'inizle ilgili fiyatlandırma, otel ve teşhis raporu verileri gibi salt okunur veriler için otel API'lerine yapılan çağrılarda kullanabilirsiniz.

Erişim jetonları bir saat (3.600 saniye) geçerlidir.

Daha önce Clientlogin'i uyguladıysanız OAuth 2.0 yaklaşımı da aşağıdaki farklılıklara sahip olmak üzere benzerdir:

  • Uygulamanız API'ye erişmek için bir Google hizmet hesabı kullanır.
  • API'leri çağırırken Authorization HTTP üst bilgisinde bir OAuth 2.0 erişim jetonu iletirsiniz.

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şturun

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

  3. Hizmet hesabı ve kimlik bilgilerini 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"), projelerinizin kullandığı Google API'leri için trafik verilerini, kimlik doğrulamasını ve fatura bilgilerini yönetmek ve görüntülemek amacıyla Google tarafından sunulan geliştirici deneyimidir.

DevConsole'da proje, Google Developer API'lerini ve Google Cloud kaynaklarını kullanan, üzerinde çalıştığınız uygulama veya uygulamalarla ilgili ayarlar, kimlik bilgileri ve meta verilerden oluşan bir koleksiyondur.

DevConsole, projenizin API kimlik bilgileri oluşturma, API'leri etkinleştirme, projenizle ilişkili ekip ve fatura bilgilerini yönetme gibi unsurlarını yönettiğiniz yerdir.

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 basit bir PROJE OLUŞTUR düğmesi gösterilir:

    fig1

  3. PROJE OLUŞTUR düğmesini tıklayın. DevConsole, Yeni Proje iletişim kutusunu gösterir:

    fig2

    Proje adı giriş alanına yeni projeniz için bir kolay ad girin. Bu alanın altında DevConsole sizin için bir proje kimliği oluşturur. Böylece kimliğin tüm projelerde benzersiz olmasını sağlar. Örneğin, "Yeni Projem" yazarsanız DevConsole my-new-project-266022 gibi bir kimlik atar.

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

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

    fig3

    Aşağıdaki resimde, DevConsole'un sol üst tarafındaki gezinme menüsü gösterilmektedir. Projenizin Kontrol Paneli görünümü gösterilir:

    fig4

Daha fazla bilgi için Developers Console'da projeleri yönetme konusuna bakın.

Yeni bir proje oluşturduğunuzda henüz bu projeyle ilişkilendirilmiş API yoktur. Sonraki adımda, yeni projeniz için Travel Partner API özelliğini 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 sayfası görüntülenir.

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

  4. Eşleşen API'ler tablosunda Travel Partner API simgesini tıklayın. DevConsole, API ile ilgili bir açıklama görüntüler.

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

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

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ı, bir web uygulaması ile otel verileriniz arasındaki etkileşimler gibi sunucular arası etkileşimler tarafından kullanılır.

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

  1. Google API Konsolu ana görünümünde, sol taraftaki gezinme panelinde yer alan Kimlik Bilgileri'ni tıklayın. DevConsole, Kimlik Bilgileri görünümünü gösterir.

    Kimlik bilgileri görünümü, projeniz için istemci kimliklerini ve kimlik bilgilerini görüntüler. Uygulamanız, OAuth 2.0 erişim jetonu isterken istemci kimliğini kullanır. Yeni projelerde henüz müşteri veya kimlik bilgisi olmaz.

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

  3. Kimlik bilgisi oluştur düğmesini tıklayın ve açılır listeden Hizmet hesabı anahtarı'nı seçin. Hizmet hesabı anahtarı oluştur görünümü görüntülenir.

  4. Hizmet hesabı açılır menüsünden Yeni hizmet hesabı'nı seçin.

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

    Ad istediğiniz herhangi bir şey olabilir ancak hesap kimliği tüm projeler genelinde benzersiz olmalıdır. DevConsole, girdiğiniz ada göre sizin için benzersiz bir hesap kimliği oluşturur.

  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, projeniz için bir özel/ortak anahtar çifti oluşturur. Özel anahtar, tarayıcınızın indirmeleri depoladığı varsayılan konuma kaydedilir. .json dosya biçiminin yerine .p12 biçimini (ikili) indirmeniz gerekir.

    Özel anahtarı, komut dosyalarınızda veya Travel Partner API ürününe erişen diğer uygulamalarda kullanırsınız.

    DevConsole, anahtarları oluşturmayı tamamladığında aşağıdaki bildirimi görüntüler:

    fig6

  8. Tamam, anladım düğmesini tıklayın. DevConsole sizi Kimlik Bilgileri görünümüne döndürür. Hizmet hesabınızla ilgili ayrıntıları onaylamak ve projenizle ilişkilendirilmiş hizmet hesaplarını görmek için bu görünümde Hizmet hesaplarını yönet'i tıklayın.

    Hizmet hesabı artık kendisiyle ilişkilendirilmiş aşağıdaki kimlik bilgilerine sahip:

    • İstemci kimliği: Uygulamanızın OAuth 2.0 erişim jetonu isterken kullandığı benzersiz tanımlayıcı.
    • E-posta adresi: Hizmet hesabı için "account_name@account_name.google.com.iam.gserviceaccount.com" biçiminde oluşturulan bir e-posta adresi.
    • Sertifika dijital parmak izleri: İndirdiğiniz özel anahtarın kimliği.

Daha fazla bilgi için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma bölümüne bakın.

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

Son adım, yeni hizmet hesabına Hotel Center'a erişim izni vermektir. Hizmet hesabı, önceki adımda oluşturduğunuz e-posta adresiyle tanımlanır. Hotel Center paylaşım ayarlarını kullanarak bu hesaba erişim sağlarsınız.

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

Hesaba kullanıcı eklemek için uygun erişiminiz yoksa bize ulaşın formunu kullanarak Google Oteller Ekibi ile iletişime geçin ve hesabınızın sahipliğini ayarlamamızı isteyin. Kanal sahibine bir veya daha fazla e-posta gönderilmesini isteyebilirsiniz. Hotel Center erişimi hakkında daha fazla bilgi için Hotel Center ve Google Ads'i bağlama başlıklı makaleyi inceleyin.

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

  2. Paylaşım iletişim kutusunu açmak için Google Hotel Center banner'ında kullanıcı ekle simgesini tıklayın.

    fig8

  3. Daha fazla kişi ekle alanına Hotel Center'a eklemek istediğiniz hizmet hesabının e-posta adresini girin.

  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, hizmet hesabınız için API erişiminin etkin olduğunu size bildirdikten sonra OAuth ile API'ye erişmeye başlayabilirsiniz.

OAuth 2.0'ı kullanma

API'ye erişmek için uygulamanızın hizmet hesabının oluşturulan e-posta adresi ve özel anahtarla kendisini Google'a tanıtması gerekir. Google'ın kimlik doğrulama mekanizması, bu anahtarı uygulamanızın API çağrılarında Authorization üstbilgisinde geçirdiğiniz bir OAuth 2.0 erişim jetonu ile değiştirir.

Erişim jetonları (hamiline ait jetonlar olarak da bilinir) OAuth 2.0 standardının bir parçasıdır. HTTP üstbilgisinde erişim jetonu belirtmek için kullanılan söz dizimi şu şekildedir:

Authorization: Bearer *oauth2_access_token*

Aşağıdaki örnekte, Reports API'ye erişen bir isteğin örnek HTTP üst bilgileri gösterilmektedir:

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. Daha sonra bu jetonu, Travel Partner API erişirken isteklerinizin Authorization başlıklarında kullanabilirsiniz.

#!/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 API anahtarlarını güvenli bir şekilde kullanmak için en iyi uygulamaları izlediğinizden emin olun.

Örnek Python komut dosyası, aşağıdaki örnekte gösterildiği gibi bir Authorization üst bilgisinin hamiline ait jetonunu üretir:

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

İsteklerinizde jetonun değerini kullanın. Kodu oluşturduktan sonra 1 saat kullanabilirsiniz.

Sorun giderme

Sorun mu yaşıyorsunuz? Aşağıdaki öğeleri hızlıca kontrol etmek sorunu çözebilir.

  1. Google Developers Console'da bir proje oluşturdunuz mu?
  2. Travel Partner API cihazını bulup etkinleştirdiniz mi?
  3. .p12 dosyası (İstemci kimliği oluştur'u tıklayıp Hizmet hesabı'nı seçtikten sonra gizli anahtar) indirdiniz mi?
  4. Şu formun hizmet hesabı istemci kimliği e-posta adresini aldınız mı: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Bu hesabı paylaş düğmesini tıklayarak Otel Reklamları Merkezi hesabınızı hizmet hesabıyla paylaştınız mı?
  6. Hizmet hesabının e-posta adresini ve iş ortağı kimliğinizi Teknik Hesap Yöneticinize (THY) gönderdiniz mi?
  7. Travel Partner API çağrılarınız Authorization başlığında yakın zamanda alınmış bir jeton iletiyor mu?
  8. Authorization üst bilginizin hamiline ait jetonu 1 saatten eski mi?

Aşağıdaki tabloda bazı yaygın hatalar ve olası çözümler listelenmiştir:

Hata Açıklama
Invalid credentials Bu, birçok anlama gelebilir. Bu hatayla karşılaşırsanız şunları kontrol edin:
  • Geçerli bir hamiline ait jeton içeren Authorization üstbilgisi belirttiniz.
  • Hamiline ait jeton süresi bir saatten kısaysa. Jeton yalnızca bir saat süreyle geçerlidir.
  • Doğru iş ortağı adını belirttiniz (partner sorgu dizesi parametresiyle). Değer, Otel Reklamları Merkezi'nde görünen iş ortağı adınız değil, benzersiz iş ortağı kimliğinizdir. İş ortağı kimliğinizi bilmiyorsanız Teknik Hesap Yöneticinizle (THY) iletişime geçin.
Not found Uç noktanız büyük olasılıkla hatalı biçimlendirilmiş. Bir GET isteği gönderdiğinizden ve istek URL'sinin geçerli olduğundan (erişmeye çalıştığınız API söz dizimine uygun olduğundan) 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. Yolun tamamında alt çizgi, büyük harf ve ifadeleri doğru şekilde kullandığınızdan emin olun.
Unsupported output format Bu hata en çok Reports API kullanılırken ortaya çıkar. GET isteğinizin URL'sinde "alt=csv" değerini belirtmeniz gerekir. 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:
  • Hizmet hesabı e-posta adresiniz yanlış. Google Developers Console'da e-posta hesabını kontrol edin ve API'ye erişim yetkisi bulunduğundan emin olun.
  • E-posta adresinin API erişimi yok. E-posta adresinin, otel verilerinize erişim yetkisi olup olmadığını kontrol edin (Hotel Center üzerinden paylaşılır).
  • Anahtar dosyası, hizmet hesabı için doğru dosya değil. Yeni bir .p12 sertifikası indirmek için DevConsole'u kullanın ve Python uygulamanızın doğru sertifikayı gösterdiğinden emin olun.
HotelAdsAPIConnection object has no attribute credentials Örnek Python uygulamasını çalıştırırken .p12 dosyanızın yolu yanlış.
Invalid scope Örnek Python uygulamasını çalıştırırken API kapsamı https://www.googleapis.com/auth/travelpartner olmalıdır.
Forbidden Kullandığınız hesap kimliği, erişim yetkinizin olmadığı bir hesap. Alt hesap sahibiyseniz üst veya kök hesap kimliğine erişemeyebilirsiniz.