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

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

OAuth 2.0 सेटअप

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

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

अगर आपने पहले Clientलॉगिन लागू किया है, तो 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

ज़्यादा जानकारी के लिए, 'डेवलपर कंसोल में प्रोजेक्ट मैनेज करना' पर जाएं.

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

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

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

अपने नए प्रोजेक्ट के लिए, Hotel API चालू करने के लिए:

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

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

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

  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 Hotels टीम से संपर्क करें और हमसे अपने खाते का मालिकाना हक सेट अप करने का अनुरोध करें. किसी मालिक को एक या उससे ज़्यादा ईमेल भेजने का अनुरोध किया जा सकता है. Hotel Center को ऐक्सेस करने के बारे में ज़्यादा जानकारी के लिए, Hotel Center और Google Ads को लिंक करना लेख पढ़ें.

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

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

    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*

यहां दिया गया उदाहरण, Report 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>

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

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. क्या आपने अपने तकनीकी खाता मैनेजर (TAM) को सेवा खाते का ईमेल पता और पार्टनर आईडी भेजा था?
  7. क्या आपके Travel Partner API कॉल, Authorization हेडर में हाल ही में मिला टोकन पास कर रहे हैं?
  8. क्या आपके Authorization हेडर का बेयरर टोकन, एक घंटे से ज़्यादा पुराना है?

यहां कुछ सामान्य गड़बड़ियों और संभावित समाधानों की सूची दी गई है:

गड़बड़ी ब्यौरा
Invalid credentials इसके कई मतलब हो सकते हैं. अगर आपको यह गड़बड़ी दिखती है, तो जांच लें कि:
  • आपने मान्य बियरर टोकन के साथ, Authorization हेडर तय किया है.
  • बेयरर टोकन एक घंटे से कम पुराना है. टोकन सिर्फ़ एक घंटे के लिए मान्य होता है.
  • आपने पार्टनर का सही नाम (partner क्वेरी स्ट्रिंग पैरामीटर के साथ) डाला है. वैल्यू आपका यूनीक पार्टनर आईडी होता है, न कि आपके पार्टनर का नाम जो Hotel Ads Center में दिखता है. अगर आपको अपना पार्टनर आईडी नहीं पता है, तो अपने तकनीकी खाता मैनेजर (TAM) से संपर्क करें.
Not found ऐसा हो सकता है कि आपका एंडपॉइंट गलत हो. पक्का करें कि आपने GET अनुरोध सबमिट किया हो और अनुरोध किया गया यूआरएल मान्य हो. यह उस एपीआई सिंटैक्स के मुताबिक होना चाहिए जिसे ऐक्सेस करने की कोशिश की जा रही है.
Invalid string value एंडपॉइंट के एक या उससे ज़्यादा हिस्सों में अमान्य सिंटैक्स है. उदाहरण के लिए, हो सकता है कि आपने पाथ के किसी हिस्से की स्पेलिंग गलत लिखी हो. पक्का करें कि आपने पूरे पाथ में सही अंडरस्कोर, कैपिटल लेटर के इस्तेमाल, और शब्दों का इस्तेमाल किया हो.
Unsupported output format आम तौर पर, यह गड़बड़ी, Report API का इस्तेमाल करते समय होती है. आपको अपने 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 आपने जिस खाता आईडी का इस्तेमाल किया है उसे ऐक्सेस करने की अनुमति आपके पास नहीं है. अगर आप किसी उप-खाते के मालिक हैं, तो हो सकता है कि आप माता-पिता/अभिभावक या रूट खाता आईडी को ऐक्सेस न कर पाएं.