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

अपने ऐप्लिकेशन को अनुमति देने के लिए, OAuth 2.0 का इस्तेमाल करें जब Hotel API ऐक्सेस करते हैं.

OAuth 2.0 सेटअप

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

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

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

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

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

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

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

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

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

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

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

Google Developers Console ('DevConsole'), 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 चालू करना होगा.

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

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

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

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

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

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

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

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

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

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