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:
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:
Gmail/Google Hesabınızda oturum açın.
Google Developers Console'u açın. Bu ilk projenizse ana görünümde basit bir PROJE OLUŞTUR düğmesi gösterilir:
PROJE OLUŞTUR düğmesini tıklayın. DevConsole, Yeni Proje iletişim kutusunu gösterir:
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.Yeni projenizi oluşturmak için Oluştur düğmesini tıklayın.
Gezinme menüsünü kullanarak API'ler ve Hizmetler > Kontrol Paneli'ni seçin.
Aşağıdaki resimde, DevConsole'un sol üst tarafındaki gezinme menüsü gösterilmektedir. Projenizin Kontrol Paneli görünümü gösterilir:
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:
Yukarıda açıklandığı şekilde projenizin Kontrol Paneli görünümüne gidin.
API'leri ve Hizmetleri Etkinleştir'i tıklayın. API Kitaplığı karşılama sayfası görüntülenir.
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.
Eşleşen API'ler tablosunda Travel Partner API simgesini tıklayın. DevConsole, API ile ilgili bir açıklama görüntüler.
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:
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.
API'ler ve hizmetlerdeki kimlik bilgileri bağlantısını tıklayın.
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.
Hizmet hesabı açılır menüsünden Yeni hizmet hesabı'nı seçin.
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.
Aşağıda gösterildiği gibi, anahtar türü için P12'yi seçin. P12 gereklidir.
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:
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.
Yeni bir tarayıcı penceresinde Hotel Center'ı açın.
Paylaşım iletişim kutusunu açmak için Google Hotel Center banner'ında kullanıcı ekle simgesini tıklayın.
Daha fazla kişi ekle alanına Hotel Center'a eklemek istediğiniz hizmet hesabının e-posta adresini girin.
Kullanıcıları bilgilendir seçeneğini işaretli bırakın.
Açılır menüden Yönet'i seçin.
Davet Et düğmesini tıklayın.
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.
- Google Developers Console'da bir proje oluşturdunuz mu?
- Travel Partner API cihazını bulup etkinleştirdiniz mi?
.p12
dosyası (İstemci kimliği oluştur'u tıklayıp Hizmet hesabı'nı seçtikten sonra gizli anahtar) indirdiniz mi?- Şu formun hizmet hesabı istemci kimliği e-posta adresini aldınız mı:
nnnnnnn@app_name.google.com.iam.gserviceaccount.com
? - Bu hesabı paylaş düğmesini tıklayarak Otel Reklamları Merkezi hesabınızı hizmet hesabıyla paylaştınız mı?
- Hizmet hesabının e-posta adresini ve iş ortağı kimliğinizi Teknik Hesap Yöneticinize (THY) gönderdiniz mi?
- Travel Partner API çağrılarınız
Authorization
başlığında yakın zamanda alınmış bir jeton iletiyor mu? 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:
|
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:
|
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. |