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

Blogger डेटा एपीआई, क्लाइंट ऐप्लिकेशन को Google डेटा एपीआई फ़ीड के रूप में Blogger कॉन्टेंट देखने और उसे अपडेट करने की सुविधा देता है.

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

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

कॉन्टेंट

दर्शक

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

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

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

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

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

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

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

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

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

रिपोर्ट का इस्तेमाल करना

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

Blogger खाता बनाना

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

लाइब्रेरी डाउनलोड की जा रही है

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

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

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

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

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 के डेटा एपीआई का इस्तेमाल करके, सार्वजनिक और निजी, दोनों फ़ीड ऐक्सेस किए जा सकते हैं. सार्वजनिक फ़ीड के लिए, किसी पुष्टि करने की ज़रूरत नहीं होती. हालांकि, ये रीड-ओनली होते हैं. अगर आप ब्लॉग में बदलाव करना चाहते हैं, तो निजी फ़ीड का अनुरोध करने से पहले आपके क्लाइंट को पुष्टि करनी होगी.

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

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

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

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

  1. क्लाइंट ऐप्लिकेशन, क्लाइंट लाइब्रेरी से मिलने वाले google.accounts.user.login() तरीके को कॉल करता है, इसे एक "scope" वैल्यू देता है, जो बताता है कि Google की किस सेवा का इस्तेमाल करना है. Blogger के लिए, दायरा "http://www.blogger.com/feeds/" है.
  2. क्लाइंट लाइब्रेरी, ब्राउज़र को Google's "Access View" पेज पर भेजती है, जहां उपयोगकर्ता, सेवा में लॉग इन करने के लिए अपने क्रेडेंशियल डाल सकता है.
  3. अगर उपयोगकर्ता लॉग इन करता है, तो पुष्टि करने वाला सिस्टम ब्राउज़र को वेब क्लाइंट के यूआरएल पर वापस भेज देता है. इसके लिए, पुष्टि करने वाले टोकन को पास किया जाता है.
  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() को फिर से कॉल करके, नया और मान्य टोकन पाना होगा.

पुष्टि करने के दो और तरीके हैं, जो अलग-अलग मामलों में आपके काम आ सकते हैं:

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

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

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