एपीआई की अनुमति देना

होटल एपीआई ऐक्सेस करते समय, अपने ऐप्लिकेशन को अनुमति देने के लिए, OAuth 2.0 का इस्तेमाल करें.

OAuth 2.0 सेटअप

OAuth 2.0 के लिए ज़रूरी है कि आप अपने Google खाते से जुड़े सेवा खाते का इस्तेमाल करके, अपनी पहचान की पुष्टि करें. सेवा खाता, OAuth 2.0 ऐक्सेस टोकन के बदले आपकी निजी कुंजी भेजता है. इसके बाद, रीड-ओनली डेटा के लिए Hotel API को कॉल में इस टोकन का इस्तेमाल किया जा सकता है. जैसे, किराया, होटल, और होटल के किराये के फ़ीड से जुड़ा डेटा.

एक घंटे (3,600 सेकंड) तक के लिए ऐक्सेस टोकन काम करते हैं.

अगर ClientLogin को पहले ही लागू किया गया था, तो OAuth 2.0 का तरीका एक जैसा है. हालांकि, दोनों में ये अंतर हैं:

  • आपका ऐप्लिकेशन, एपीआई को ऐक्सेस करने के लिए Google सेवा खाते का इस्तेमाल करता है.
  • एपीआई को कॉल करते समय, Authorization एचटीटीपी हेडर में OAuth 2.0 ऐक्सेस टोकन पास किया जाता है.

Travel Partner API के साथ OAuth 2.0 का इस्तेमाल करने के लिए, अपना खाता सेट अप करने के लिए यह तरीका अपनाएं:

  1. Google Developers Console (DevConsole) में नया प्रोजेक्ट बनाना

  2. नए प्रोजेक्ट के लिए, Travel Partner API का ऐक्सेस दें

  3. सेवा खाता और उसके क्रेडेंशियल बनाना

  4. अपने सेवा खाते को अपने होटल के डेटा का ऐक्सेस देना

इनमें से हर चरण के बारे में आगे आने वाले सेक्शन में बताया गया है.

पहला चरण: नया DevConsole प्रोजेक्ट बनाना

Google Developers Console ('DevConsole'), आपके प्रोजेक्ट के लिए इस्तेमाल होने वाले Google API के लिए ट्रैफ़िक डेटा, पुष्टि, और बिलिंग जानकारी को मैनेज करने और देखने का Google का डेवलपर अनुभव है.

DevConsole में, प्रोजेक्ट ऐसे ऐप्लिकेशन या ऐप्लिकेशन की सेटिंग, क्रेडेंशियल, और मेटाडेटा का कलेक्शन होता है जिन पर आपका काम चल रहा है. इसमें, 'Google Developer API' और Google Cloud के संसाधनों का इस्तेमाल किया जाता है.

DevConsole वह जगह है जहां आपके प्रोजेक्ट के इन पहलुओं को मैनेज किया जाता है. जैसे, एपीआई क्रेडेंशियल जनरेट करना, एपीआई चालू करना, और अपने प्रोजेक्ट से जुड़ी टीम और बिलिंग की जानकारी मैनेज करना.

नया DevConsole प्रोजेक्ट बनाने के लिए:

  1. अपने Gmail/Google खाते में साइन इन करें.

  2. Google Developer Console खोलें. अगर यह आपका पहला प्रोजेक्ट है, तो मुख्य व्यू में आसानी से प्रोजेक्ट बनाएं बटन दिखेगा:

    fig1

  3. प्रोजेक्ट बनाएं बटन पर क्लिक करें. DevConsole में नया प्रोजेक्ट डायलॉग बॉक्स दिखाया गया है:

    fig2

    प्रोजेक्ट का नाम इनपुट फ़ील्ड में, अपने नए प्रोजेक्ट के लिए कोई आसान नाम डालें. फ़ील्ड के नीचे, DevConsole आपके लिए एक प्रोजेक्ट आईडी जनरेट करता है. इससे यह पक्का किया जाता है कि सभी प्रोजेक्ट के लिए आईडी यूनीक है. उदाहरण के लिए, अगर आपने "मेरा नया प्रोजेक्ट" डाला है, तो DevConsole को my-new-project-266022 जैसा आईडी असाइन करता है.

  4. नया प्रोजेक्ट बनाने के लिए, बनाएं बटन पर क्लिक करें.

  5. एपीआई और सेवाएं > डैशबोर्ड चुनने के लिए, नेविगेशन मेन्यू का इस्तेमाल करें.

    fig3

    नीचे दी गई इमेज में DevConsole के ऊपर बाईं ओर नेविगेशन मेन्यू दिखाया गया है. इससे आपको अपने प्रोजेक्ट का डैशबोर्ड व्यू दिखेगा:

    fig4

ज़्यादा जानकारी के लिए, Developers Console में प्रोजेक्ट मैनेज करना लेख पढ़ें.

जब कोई नया प्रोजेक्ट बनाया जाता है, तो उसके साथ फ़िलहाल कोई एपीआई नहीं जुड़ा है. अगले चरण में, आपको अपने नए प्रोजेक्ट के लिए Travel Partner API को चालू करना होगा.

दूसरा चरण: नए प्रोजेक्ट के लिए Travel Partner API चालू करना

होटल एपीआई का इस्तेमाल करने के लिए, आपको अपने नए DevConsole प्रोजेक्ट में Travel Partner API चालू करना होगा.

अपने नए प्रोजेक्ट के लिए होटल एपीआई चालू करने के लिए:

  1. ऊपर बताए गए तरीके से, अपने प्रोजेक्ट के डैशबोर्ड व्यू पर जाएं.

  2. एपीआई और सेवाएं चालू करें पर क्लिक करें. इससे एपीआई लाइब्रेरी का वेलकम पेज दिखता है.

  3. खोज फ़ील्ड में, Travel Partner API टाइप करें. Google API Console, एपीआई की ऐसी सूची दिखाता है जो आपके टाइप किए गए टेक्स्ट से मैच करती है.

  4. मिलते-जुलते एपीआई की टेबल में, Travel Partner API पर क्लिक करें. DevConsole, एपीआई के बारे में जानकारी दिखाता है.

  5. अपने प्रोजेक्ट के लिए इस एपीआई को चालू करने के लिए, एपीआई चालू करें बटन पर क्लिक करें.

ज़्यादा जानकारी के लिए, एपीआई को चालू और बंद करना लेख पढ़ें.

आपके Google खाते के नए प्रोजेक्ट के लिए, Hotel API की सुविधा चालू कर दी गई है.

अगला कदम, सेवा खाता बनाना और उसके लिए कुंजियां जनरेट करना है.

तीसरा चरण: सेवा खाता बनाना और उसके क्रेडेंशियल जनरेट करना

सेवा खातों का इस्तेमाल, सर्वर-टू-सर्वर इंटरैक्शन में किया जाता है. उदाहरण के लिए, वेब ऐप्लिकेशन और आपके होटल के डेटा के बीच होने वाले इंटरैक्शन.

सेवा खाता बनाने और कॉन्फ़िगर करने के लिए:

  1. Google API कंसोल के मुख्य व्यू में, बाईं ओर मौजूद नेविगेशन में क्रेडेंशियल पर क्लिक करें. DevConsole क्रेडेंशियल व्यू दिखाता है.

    क्रेडेंशियल व्यू में, आपके प्रोजेक्ट के क्लाइंट आईडी और क्रेडेंशियल दिखते हैं. OAuth 2.0 ऐक्सेस टोकन का अनुरोध करते समय, आपका ऐप्लिकेशन क्लाइंट आईडी का इस्तेमाल करेगा. अब तक नए प्रोजेक्ट में कोई क्लाइंट या क्रेडेंशियल नहीं होगा.

  2. एपीआई और सेवाओं में क्रेडेंशियल लिंक पर क्लिक करें.

  3. क्रेडेंशियल बनाएं बटन पर क्लिक करें और ड्रॉपडाउन से सेवा खाता कुंजी चुनें. आपको सेवा खाते की कुंजी बनाएं व्यू दिखेगा.

  4. सेवा खाता ड्रॉपडाउन से, नया सेवा खाता चुनें.

  5. सेवा खाते का नाम और सेवा खाता आईडी डालें.

    नाम अपनी पसंद का कोई भी नाम हो सकता है, लेकिन सभी प्रोजेक्ट के लिए खाता आईडी यूनीक होना चाहिए. आपके डाले गए नाम के आधार पर, DevConsole आपके लिए एक यूनीक खाता आईडी जनरेट करेगा.

  6. कुंजी के टाइप के लिए P12 चुनें, जैसा कि नीचे दिखाया गया है. P12 ज़रूरी है.

    fig5

  7. बनाएं बटन पर क्लिक करें. DevConsole आपके प्रोजेक्ट के लिए, निजी/सार्वजनिक पासकोड का जोड़ा जनरेट करता है. निजी कुंजी को उस डिफ़ॉल्ट जगह पर सेव किया जाता है जहां आपका ब्राउज़र डाउनलोड सेव करता है. आपको .json फ़ाइल फ़ॉर्मैट के बजाय, .p12 फ़ॉर्मैट (बाइनरी) डाउनलोड करना होगा.

    आप अपनी स्क्रिप्ट या Travel Partner API को ऐक्सेस करने वाले दूसरे ऐप्लिकेशन में निजी कुंजी का इस्तेमाल करते हैं.

    कुंजियां जनरेट करने के बाद, DevConsole इस तरह की सूचना दिखाता है:

    fig6

  8. ठीक है, समझ लिया बटन पर क्लिक करें. DevConsole आपको क्रेडेंशियल व्यू पर वापस ले जाता है. अपने सेवा खाते की जानकारी की पुष्टि करने और अपने प्रोजेक्ट से जुड़े सेवा खाते देखने के लिए, इस व्यू में सेवा खाते मैनेज करें पर क्लिक करें.

    सेवा खाते में अब ये क्रेडेंशियल मौजूद हैं:

    • क्लाइंट आईडी: यह एक यूनीक आइडेंटिफ़ायर होता है. OAuth 2.0 ऐक्सेस टोकन का अनुरोध करते समय, आपका ऐप्लिकेशन इसका इस्तेमाल करता है.
    • ईमेल पता: "account_name@project_name.google.com.iam.gserviceaccount.com" के फ़ॉर्म में, सेवा खाते के लिए जनरेट किया गया ईमेल पता.
    • सर्टिफ़िकेट के फ़िंगरप्रिंट: डाउनलोड की गई निजी कुंजी का आईडी.

ज़्यादा जानकारी के लिए, सर्वर से सर्वर ऐप्लिकेशन के लिए OAuth 2.0 का इस्तेमाल करना लेख पढ़ें.

चौथा चरण: सेवा खाते को अपने Hotel Center के डेटा का ऐक्सेस देना

आखिर में, आपको नए सेवा खाते को अपने Hotel Center का ऐक्सेस देना होगा. सेवा खाते की पहचान, पिछले चरण में बनाए गए जनरेट किए गए ईमेल पते से की जाती है. आप Hotel Center की शेयर करने की सेटिंग का इस्तेमाल करके, इस खाते को ऐक्सेस देते हैं.

किसी सेवा खाते को अपने Hotel Center के डेटा का ऐक्सेस देने के लिए:

अगर आपके पास खाते में उपयोगकर्ताओं को जोड़ने का सही ऐक्सेस नहीं है, तो हमसे संपर्क करें फ़ॉर्म का इस्तेमाल करके Google होटल टीम से संपर्क करें और अपने खाते का मालिकाना हक सेट अप करने का अनुरोध करें. आप किसी मालिक को ईमेल भेजने के लिए, एक या उससे ज़्यादा ईमेल पाने का अनुरोध कर सकते हैं. Hotel Center के ऐक्सेस के बारे में ज़्यादा जानकारी के लिए, Hotel Center और Google Ads को लिंक करना लेख पढ़ें.

  1. नई ब्राउज़र विंडो में, Hotel Center खोलें. fig7

  2. शेयर करने का डायलॉग बॉक्स खोलने के लिए, Hotel Center by Google बैनर पर, 'उपयोगकर्ता जोड़ें' आइकॉन पर क्लिक करें.

    fig8

  3. ज़्यादा लोगों को जोड़ें फ़ील्ड में, उस सेवा खाते का ईमेल पता डालें जिसे आपको अपने Hotel Center में जोड़ना है.

  4. लोगों को सूचना दें विकल्प को चुनकर रखें.

  5. ड्रॉप-डाउन मेन्यू से, मैनेज करें को चुनें.

  6. न्योता दें बटन पर क्लिक करें.

  7. Hotel Center में उपयोगकर्ताओं को जोड़ने के बाद, आपका सेवा खाता 24 घंटों में एपीआई ऐक्सेस के लिए चालू हो जाना चाहिए.

जब Google आपको यह सूचना दे देगा कि आपके सेवा खाते के लिए, एपीआई ऐक्सेस चालू है, तो OAuth की मदद से एपीआई को ऐक्सेस किया जा सकता है.

OAuth 2.0 का इस्तेमाल करना

एपीआई को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन को सेवा खाते के जनरेट किए गए ईमेल पते और निजी कुंजी की मदद से, Google को अपनी पहचान बतानी होगी. पुष्टि करने का Google का तरीका, इस कुंजी को OAuth 2.0 ऐक्सेस टोकन से बदल देता है. इसे आपके ऐप्लिकेशन के एपीआई कॉल में Authorization हेडर में पास किया जाता है.

ऐक्सेस टोकन (जिन्हें बियरर टोकन भी कहा जाता है) OAuth 2.0 स्टैंडर्ड का हिस्सा हैं. एचटीटीपी हेडर में ऐक्सेस टोकन तय करने का सिंटैक्स यह है:

Authorization: Bearer *oauth2_access_token*

यहां दिए गए उदाहरण में, रिपोर्ट एपीआई को ऐक्सेस करने वाले अनुरोध के सैंपल एचटीटीपी हेडर दिखाए गए हैं:

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>

अपना ऐप्लिकेशन डेवलप करते समय, एपीआई पासकोड का सुरक्षित तरीके से इस्तेमाल करने के सबसे सही तरीके ज़रूर अपनाएं.

Python स्क्रिप्ट का सैंपल, Authorization हेडर का बेयरर टोकन देता है. इसका उदाहरण नीचे दिया गया है:

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

अपने अनुरोधों में टोकन की वैल्यू का इस्तेमाल करें. जनरेट करने के एक घंटे बाद तक यह अच्छा रहता है.

समस्या हल करना

क्या आपको कोई समस्या आ रही है? नीचे दिए गए आइटम की जल्दी से जांच करने से समस्या हल हो सकती है.

  1. क्या आपने Google Developer Console में कोई प्रोजेक्ट बनाया था?
  2. क्या आपने Travel Partner API को ढूंढा और उसे चालू किया?
  3. क्या आपने कोई .p12 फ़ाइल डाउनलोड की है—यह एक निजी कुंजी है, जो क्लाइंट आईडी बनाएं पर क्लिक करने और सेवा खाता चुनने के बाद मिलती है?
  4. क्या आपको किसी फ़ॉर्म में सेवा खाते के क्लाइंट आईडी का ईमेल पता मिला था: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. क्या आपने यह खाता शेयर करें बटन पर क्लिक करके, सेवा खाते के साथ अपना Hotel Ads Center खाता शेयर किया है?
  6. क्या आपने अपने टेक्निकल अकाउंट मैनेजर (टीएएम) को सेवा खाते का ईमेल पता और पार्टनर आईडी भेजा है?
  7. क्या आपके Travel Partner API कॉल, Authorization हेडर में हाल ही में मिला टोकन पास कर रहे हैं?
  8. क्या आपके Authorization हेडर का बेयरर टोकन 1 घंटे से ज़्यादा पुराना है?

यहां दी गई टेबल में कुछ आम गड़बड़ियों और उन्हें ठीक करने के तरीकों की सूची दी गई है:

गड़बड़ी कंपनी का ब्यौरा
Invalid credentials इसके कई मतलब हो सकते हैं. अगर आपको यह गड़बड़ी दिखती है, तो जांच लें कि:
  • आपने मान्य बियरर टोकन के साथ Authorization हेडर बताया है.
  • बेयरर टोकन एक घंटे से कम पुराना है. टोकन सिर्फ़ एक घंटे के लिए मान्य होता है.
  • आपने पार्टनर का सही नाम (partner क्वेरी स्ट्रिंग पैरामीटर के साथ) डाला है. वैल्यू, आपका यूनीक पार्टनर आईडी होती है, न कि Hotel Ads Center में दिखने वाले पार्टनर का नाम. अगर आपको अपना पार्टनर आईडी नहीं पता है, तो अपने तकनीकी खाता मैनेजर (टीएएम) से संपर्क करें.
Not found ज़्यादातर मामलों में, आपका एंडपॉइंट गलत है. पक्का करें कि आपने GET के लिए अनुरोध सबमिट किया है. साथ ही, यह भी देखें कि अनुरोध का यूआरएल मान्य है या नहीं. यह उस एपीआई सिंटैक्स के मुताबिक होना चाहिए जिसे ऐक्सेस करने की कोशिश की जा रही है.
Invalid string value एंडपॉइंट के एक या उससे ज़्यादा हिस्सों में अमान्य सिंटैक्स है. उदाहरण के लिए, हो सकता है कि आपने पाथ के कुछ हिस्से की स्पेलिंग गलत लिखी हो. पक्का करें कि आपने पूरे पाथ में सही अंडरस्कोर, कैपिटल लेटर के इस्तेमाल, और शब्दों का इस्तेमाल किया हो.
Unsupported output format आम तौर पर, यह गड़बड़ी रिपोर्ट एपीआई का इस्तेमाल करते समय होती है. आपको अपने GET अनुरोध के यूआरएल में "alt=csv" बताना होगा. रिपोर्ट एपीआई, JSON के साथ काम नहीं करता है.
AccessTokenRefreshError/Invalid grant Python ऐप्लिकेशन का नमूना चलाते समय, यह गड़बड़ी इन वजहों से हो सकती है:
  • आपके सेवा खाते का ईमेल पता गलत है. Google Developer Console में ईमेल खाता देखें और पक्का करें कि उसे एपीआई ऐक्सेस करने की अनुमति है.
  • इस ईमेल पते में एपीआई का ऐक्सेस नहीं है. पक्का करें कि आपके ईमेल पते के पास, आपके होटल का डेटा ऐक्सेस करने की अनुमति हो. इसे Hotel Center से शेयर किया जाता है.
  • कुंजी फ़ाइल, सेवा खाते के लिए सही नहीं है. नया .p12 सर्टिफ़िकेट डाउनलोड करने के लिए, DevConsole का इस्तेमाल करें और पक्का करें कि आपका Python ऐप्लिकेशन सही सर्टिफ़िकेट पर ले जा रहा हो.
HotelAdsAPIConnection object has no attribute credentials सैंपल Python ऐप्लिकेशन चलाते समय, आपकी .p12 फ़ाइल का पाथ गलत होता है.
Invalid scope सैंपल Python ऐप्लिकेशन चलाते समय, एपीआई का स्कोप https://www.googleapis.com/auth/travelpartner होना चाहिए.
Forbidden आपने जिस खाता आईडी का इस्तेमाल किया है उसे ऐक्सेस करने का अधिकार आपके पास नहीं है. अगर आप उप-खाते के मालिक हैं, तो हो सकता है कि आप पैरंट खाते या रूट खाते का आईडी ऐक्सेस न कर पाएं.