डेवलपर की गाइड: JavaScript

Blogger Data API की मदद से क्लाइंट ऐप्लिकेशन, Blogger का कॉन्टेंट Google Data API फ़ीड के रूप में देख और अपडेट कर सकते हैं.

आपका क्लाइंट ऐप्लिकेशन नई ब्लॉग पोस्ट बनाने, मौजूदा ब्लॉग पोस्ट में बदलाव करने या उन्हें मिटाने और किसी खास शर्त से मेल खाने वाली ब्लॉग पोस्ट के लिए क्वेरी करने के लिए, Blogger Data API का इस्तेमाल कर सकता है.

इस दस्तावेज़ में Blogger के डेटा एपीआई की क्षमताओं के बारे में कुछ जानकारी देने के अलावा, JavaScript क्लाइंट लाइब्रेरी का इस्तेमाल करके बुनियादी Data API इंटरैक्शन के उदाहरण भी दिए गए हैं. अगर लाइब्रेरी में इस्तेमाल होने वाले प्रोटोकॉल के बारे में ज़्यादा जानना है, तो इस डेवलपर की गाइड का प्रोटोकॉल सेक्शन देखें.

विषय सूची

दर्शक

यह दस्तावेज़ उन प्रोग्रामर के लिए है जो Blogger के साथ इंटरैक्ट करने वाले JavaScript क्लाइंट ऐप्लिकेशन लिखना चाहते हैं. इसमें JavaScript क्लाइंट लाइब्रेरी का इस्तेमाल करके, बेसिक Data API इंटरैक्शन के उदाहरणों की सीरीज़ दी गई है.

Blogger Data API की रेफ़रंस जानकारी के लिए, प्रोटोकॉल रेफ़रंस गाइड देखें. इस दस्तावेज़ में मान लिया गया है कि आपको Google Data API प्रोटोकॉल के सामान्य आइडिया और JavaScript क्लाइंट लाइब्रेरी में इस्तेमाल किए जाने वाले डेटा मॉडल और कंट्रोल फ़्लो के बारे में पता है. यह यह भी मानती है कि आपको JavaScript में प्रोग्राम करना आता है.

क्लाइंट लाइब्रेरी से मिलने वाली क्लास और तरीकों के बारे में जानकारी पाने के लिए, JavaScript क्लाइंट लाइब्रेरी एपीआई का रेफ़रंस देखें.

इस दस्तावेज़ को क्रम से पढ़ने के लिए डिज़ाइन किया गया है. हर उदाहरण में पहले के उदाहरण शामिल किए गए हैं.

उपयोग की शर्तें

JavaScript क्लाइंट लाइब्रेरी का इस्तेमाल करते समय, आप Google JavaScript क्लाइंट लाइब्रेरी के इस्तेमाल की शर्तों का पालन करने के लिए सहमत हैं.

साथ काम करने वाले एनवायरमेंट के बारे में जानकारी

फ़िलहाल, हम सिर्फ़ ऐसे JavaScript क्लाइंट ऐप्लिकेशन के साथ काम करते हैं जो ब्राउज़र के वेब पेज पर चलते हैं. फ़िलहाल, Firefox 1.5 और उसके बाद के वर्शन, Internet Explorer 6.0 और उसके बाद के वर्शन, ब्राउज़र पर काम करते हैं.

JavaScript क्लाइंट लाइब्रेरी, सेवा के सर्वर के साथ सभी कम्यूनिकेशन को मैनेज करती है. अगर आप एक अनुभवी JS डेवलपर हैं, तो आपके मन में यह विचार आ सकता है, "लेकिन एक ही ऑरिजिन से जुड़ी नीति का क्या होगा?" JavaScript क्लाइंट लाइब्रेरी की मदद से आपका क्लाइंट, ब्राउज़र के सुरक्षा मॉडल का पालन करते हुए, किसी भी डोमेन से Google Data API के अनुरोध भेज सकता है.

प्रारंभ करना

कोई JavaScript क्लाइंट ऐप्लिकेशन लिखने से पहले, आपको लाइब्रेरी पाने के लिए कुछ सेटअप करना होगा.

Blogger खाता बनाना

जांच करने के लिए, Blogger खाते के लिए साइन अप किया जा सकता है. Blogger, Google खाते का इस्तेमाल करता है. इसलिए, अगर आपके पास पहले से Google खाता है, तो आपको कोई कार्रवाई करने की ज़रूरत नहीं है.

लाइब्रेरी का अधिग्रहण करना

आपका क्लाइंट, क्लाइंट लाइब्रेरी का इस्तेमाल कर सके, इससे पहले क्लाइंट को सर्वर से क्लाइंट लाइब्रेरी कोड का अनुरोध करना होगा.

Google AJAX एपीआई लोडर को फ़ेच करने के लिए, अपने एचटीएमएल दस्तावेज़ के <head> सेक्शन में <script> टैग का इस्तेमाल करके शुरू करें:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

लोडर को फ़ेच करने के बाद Google Data API क्लाइंट लाइब्रेरी पाने के लिए, अपने JavaScript सेटअप कोड में इस लाइन का इस्तेमाल करें. इसे आपके एचटीएमएल दस्तावेज़ के <head> सेक्शन या आपके एचटीएमएल दस्तावेज़ के <head> सेक्शन में <script> टैग का इस्तेमाल करके शामिल की गई JavaScript फ़ाइल से कॉल किया जाना चाहिए:

google.load("gdata", "1.x");

google.load() का दूसरा पैरामीटर, JavaScript क्लाइंट लाइब्रेरी के अनुरोध किए गए वर्शन की संख्या है.हमारी वर्शन नंबरिंग स्कीम, Google Maps API में इस्तेमाल की गई स्कीम के आधार पर बनाई गई है. यहां संभावित वर्शन नंबर और उनका मतलब बताया गया है:

"1"
मेज़र वर्शन 1 का दूसरा से आखिरी वर्शन.
"1.x"
मेजर वर्शन 1 का नया वर्शन.
"1.s"
मेज़र वर्शन 1 का नया और स्टेबल वर्शन. डेवलपर से मिले सुझाव के आधार पर, हम कभी-कभी क्लाइंट लाइब्रेरी के किसी खास वर्शन को "स्टेबल" वर्शन के तौर पर मार्क करेंगे. हालांकि, ऐसा हो सकता है कि उस वर्शन में नई सुविधाएं न हों.
"1.0", "1.1" वगैरह
लाइब्रेरी का एक खास वर्शन, जिसमें एक बड़ा और छोटा सा रिविज़न नंबर मौजूद हो.

google.load() को कॉल करने के बाद, आपको लोड करने वाले व्यक्ति को कहना होगा कि वह पेज लोड होने तक इंतज़ार करे और फिर अपने कोड को कॉल करें:

google.setOnLoadCallback(getMyBlogFeed);

जहां getMyBlogFeed() एक फ़ंक्शन है, जिसकी जानकारी हम इस दस्तावेज़ के बाद के सेक्शन में देंगे. <body> एलिमेंट में onload हैंडलर जोड़ने के बजाय, इस तरीके का इस्तेमाल करें.

Blogger सेवा की पुष्टि करना

Blogger Data API का इस्तेमाल करके, सार्वजनिक और निजी फ़ीड, दोनों को ऐक्सेस किया जा सकता है. सार्वजनिक फ़ीड के लिए किसी प्रमाणीकरण की आवश्यकता नहीं होती, लेकिन वे केवल पढ़ने के लिए होती हैं. अगर आपको ब्लॉग में बदलाव करना है, तो निजी फ़ीड का अनुरोध करने से पहले, आपको अपने क्लाइंट की पुष्टि करनी होगी.

JavaScript क्लाइंट लाइब्रेरी, AuthSub की पुष्टि करने वाले सिस्टम का इस्तेमाल करती है. Google Data API की मदद से पुष्टि करने के बारे में ज़्यादा जानने के लिए, पुष्टि करने से जुड़ा दस्तावेज़ देखें.

AuthSub प्रॉक्सी की पुष्टि

AuthSub प्रॉक्सी प्रमाणीकरण का उपयोग उन वेब ऐप्लिकेशन द्वारा किया जाता है जिन्हें Google खातों के लिए अपने उपयोगकर्ताओं को प्रमाणित करने की आवश्यकता होती है. वेबसाइट ऑपरेटर और क्लाइंट कोड के पास, Blogger के उपयोगकर्ता के उपयोगकर्ता नाम और पासवर्ड का ऐक्सेस नहीं होता है. इसके बजाय, क्लाइंट को खास AuthSub टोकन मिलते हैं. इनकी मदद से, क्लाइंट किसी उपयोगकर्ता की ओर से कार्रवाई कर सकता है.

यहां इस बारे में खास जानकारी दी गई है कि वेब पर आधारित JavaScript क्लाइंट की पुष्टि करने की प्रक्रिया के दौरान क्या होता है:

  1. क्लाइंट ऐप्लिकेशन, क्लाइंट लाइब्रेरी से मिले google.accounts.user.login() तरीके को कॉल करता है. इसके लिए, इसे एक "स्कोप" वैल्यू दी जाती है, जो बताती है कि Google की किस सेवा का इस्तेमाल किया जाएगा. Blogger के लिए, "http://www.blogger.com/feeds/" का स्कोप है.
  2. क्लाइंट लाइब्रेरी, ब्राउज़र को Google के "ऐक्सेस का अनुरोध" पेज पर भेजती है. यहां उपयोगकर्ता, सेवा में लॉग इन करने के लिए अपने क्रेडेंशियल डाल सकते हैं.
  3. अगर उपयोगकर्ता लॉग इन कर लेता है, तो AuthSub सिस्टम, ब्राउज़र को पुष्टि करने वाले टोकन के साथ वेब क्लाइंट के यूआरएल पर वापस भेज देता है.
  4. JavaScript क्लाइंट लाइब्रेरी, टोकन को कुकी में सेव करती है और क्लाइंट ऐप्लिकेशन के उस फ़ंक्शन पर कंट्रोल देती है जिसे google.accounts.user.login() कहा जाता है.
  5. जब क्लाइंट ऐप्लिकेशन, क्लाइंट लाइब्रेरी के उन तरीकों को कॉल करता है जो Blogger के साथ इंटरैक्ट करते हैं, तो क्लाइंट लाइब्रेरी सभी अनुरोधों के लिए टोकन को अपने-आप जोड़ देती है.

ध्यान दें: JavaScript क्लाइंट लाइब्रेरी से किसी वेब ब्राउज़र में Blogger की पुष्टि के अनुरोध किए जा सकें, इसके लिए आपके पेज में एक इमेज होनी चाहिए जो उसी डोमेन पर होस्ट की गई हो जिस पर आपका पेज है. यह कोई भी इमेज हो सकती है, भले ही एक पिक्सल की पारदर्शी इमेज हो, लेकिन पेज पर एक इमेज ज़रूर होनी चाहिए. अगर आपको इमेज को अपने पेज पर नहीं दिखाना है, तो <img> टैग के style एट्रिब्यूट का इस्तेमाल करके, इमेज को रेंडर होने वाली जगह से बाहर रखें. उदाहरण के लिए: style="position:absolute; top: -1000px;"

यह क्लाइंट ऐप्लिकेशन कोड है, जो लॉग इन को मैनेज करता है. हम बाद में अन्य कोड से setupMyService() फ़ंक्शन को कॉल करेंगे.

function logMeIn() {
  scope = "http://www.blogger.com/feeds/";
  var token = google.accounts.user.login(scope);
}

function setupMyService() {
  var myService =
    new google.gdata.blogger.BloggerService('exampleCo-exampleApp-1');
  logMeIn();
  return myService;
}

सलाह: हमारा सुझाव है कि आप लॉगिन बटन या उपयोगकर्ता का इनपुट इस्तेमाल करने का कोई दूसरा तरीका उपलब्ध कराएं, ताकि लोगों को मैन्युअल तरीके से लॉगिन करने के लिए कहा जा सके. अगर पेज लोड होने के तुरंत बाद, उपयोगकर्ता के इंटरैक्शन का इंतज़ार किए बिना google.accounts.user.login() को कॉल किया जाता है, तो आपके पेज पर आने के बाद, उपयोगकर्ता को सबसे पहले Google का लॉगिन पेज दिखेगा. अगर उपयोगकर्ता लॉग इन नहीं करता है, तो Google उसे वापस आपके पेज पर नहीं भेजता है. इसलिए, उपयोगकर्ता के नज़रिए से देखा जाए, तो उसने आपके पेज पर जाने की कोशिश की, लेकिन उसे वापस भेज दिया गया और उसे कभी वापस नहीं भेजा गया. इस स्थिति से उपयोगकर्ता भ्रमित और निराश हो सकते हैं. इस दस्तावेज़ में दिए गए कोड में, हम लोड होने के तुरंत बाद google.accounts.user.login() को कॉल करेंगे, ताकि उदाहरण को आसान रखा जा सके. हालांकि, हम असल दुनिया के क्लाइंट ऐप्लिकेशन के लिए, इस तरीके का सुझाव नहीं देते.

ध्यान दें कि आपको token नाम वाले वैरिएबल के साथ कुछ भी करने की ज़रूरत नहीं है. क्लाइंट लाइब्रेरी टोकन को ट्रैक करती रहती है, इसलिए आपको ऐसा करने की ज़रूरत नहीं होती.

ध्यान दें: जब कोई नया BloggerService ऑब्जेक्ट बनाया जाता है, तो क्लाइंट लाइब्रेरी google.gdata.client.init() नाम के तरीके को कॉल करती है. इससे यह पता चलता है कि क्लाइंट जिस ब्राउज़र पर चल रहा है वह काम करता है या नहीं. अगर कोई गड़बड़ी होती है, तो क्लाइंट लाइब्रेरी उपयोगकर्ता को गड़बड़ी का एक मैसेज दिखाती है. अगर आपको इस तरह की गड़बड़ी को खुद ठीक करना है, तो सेवा बनाने से पहले google.gdata.client.init(handleInitError) को साफ़ तौर पर कॉल करें, जहां handleInitError() आपका फ़ंक्शन है. अगर कोई init गड़बड़ी होती है, तो आपके फ़ंक्शन को एक स्टैंडर्ड गड़बड़ी ऑब्जेक्ट मिलता है; उस ऑब्जेक्ट के साथ अपनी पसंद के हिसाब से कुछ भी किया जा सकता है.

टोकन तब तक मान्य रहता है, जब तक कि google.accounts.user.logout() को कॉल करके इसे रद्द नहीं किया जाता:

function logMeOut() {
  google.accounts.user.logout();
}

अगर logout() को कॉल नहीं किया जाता है, तो टोकन को सेव करने वाली कुकी दो साल तक सेव रहती है. हालांकि, ऐसा तब तक रहता है, जब तक उपयोगकर्ता उसे मिटा नहीं देता. कुकी सभी ब्राउज़र सेशन में सेव रहती है. इससे उपयोगकर्ता अपना ब्राउज़र बंद करके, उसे फिर से खोल सकता है. साथ ही, आपके क्लाइंट के पास वापस आ सकता है और वह लॉग इन कर सकता है.

हालांकि, कुछ ऐसी असामान्य स्थितियां होती हैं जिनमें किसी सेशन के दौरान टोकन अमान्य हो सकता है. अगर Blogger किसी टोकन को अस्वीकार कर देता है, तो आपके क्लाइंट को मौजूदा टोकन वाली कुकी को हटाने के लिए logout() को कॉल करके, गड़बड़ी से जुड़ी शर्त को मैनेज करना चाहिए. इसके बाद, नया मान्य टोकन पाने के लिए login() को दोबारा कॉल करना चाहिए.

AuthSub के दो अन्य तरीके हैं जो आपको अलग-अलग कॉन्टेक्स्ट में काम के लग सकते हैं:

  • google.accounts.user.checkLogin(scope) से आपको यह पता चलता है कि दिए गए स्कोप के लिए, ब्राउज़र में फ़िलहाल पुष्टि करने वाला टोकन मौजूद है या नहीं.
  • डीबग करने के लिए, google.accounts.user.getInfo() से मौजूदा टोकन के बारे में ज़्यादा जानकारी मिलती है.

AuthSub के साथ इंटरैक्ट करने के लिए JavaScript का इस्तेमाल करने के बारे में जानने के लिए, JavaScript क्लाइंट लाइब्रेरी की मदद से "AuthSub" की पुष्टि करने की प्रक्रिया का इस्तेमाल करना दस्तावेज़ देखें. इसमें टोकन मैनेजमेंट के साथ-साथ checkLogin() और getInfo() पर जानकारी शामिल है.

वापस सबसे ऊपर जाएं