कॉन्टेंट सर्विस

जब किसी स्क्रिप्ट को वेब ऐप्लिकेशन के तौर पर पब्लिश किया जाता है, तो स्क्रिप्ट के यूआरएल पर अनुरोध किए जाने पर, खास कॉलबैक फ़ंक्शन doGet()और doPost() शुरू किए जाते हैं. एचटीएमएल सेवा की मदद से बनाए गए यूज़र इंटरफ़ेस ऑब्जेक्ट के बजाय, कॉन्टेंट सेवा का इस्तेमाल रॉ टेक्स्ट कॉन्टेंट दिखाने के लिए किया जा सकता है. इससे आपको ऐसी स्क्रिप्ट लिखने की सुविधा मिलती है जो "सेवाओं" के तौर पर काम करती हैं. ये स्क्रिप्ट, GET और POST के अनुरोधों के जवाब में और अलग-अलग तरह के MIME टाइप का डेटा दिखाती हैं.

बुनियादी बातें

यहां कॉन्टेंट सेवा का एक आसान उदाहरण दिया गया है:

function doGet() {
  return ContentService.createTextOutput('Hello, world!');
}

यूज़र इंटरफ़ेस दिखाने के लिए, जिस तरीके का इस्तेमाल किया जाता है उसी तरीके से स्क्रिप्ट को वेब ऐप्लिकेशन के तौर पर डिप्लॉय करें. जब स्क्रिप्ट के यूआरएल पर GET का अनुरोध किया जाता है, तो Hello, world! टेक्स्ट दिखाया जाता है. सादे टेक्स्ट के अलावा, यह सेवा ATOM, CSV, iCal, JavaScript, JSON, आरएसएस, vCard, और एक्सएमएल कॉन्टेंट को लौटाने की सुविधा भी देती है.

आरएसएस फ़ीड दिखाए जा रहे हैं

चलिए, थोड़ा मुश्किल सवाल हल करते हैं. जैसे, आरएसएस फ़ीड को फ़िल्टर करना. XKCD कॉमिक्स हमेशा मज़ेदार होती हैं, लेकिन आपको पूरा चुटकुला तब तक नहीं मिल सकता, जब तक आप अतिरिक्त वैकल्पिक लेख देखने के लिए कॉमिक स्ट्रिप पर माउस घुमाएं नहीं. माफ़ करें, मोबाइल ब्राउज़र पर कर्सर घुमाना संभव नहीं है, इसलिए यह काम नहीं करता है.

मान लें कि हम फ़ीड में बदलाव करना चाहते थे, ताकि फ़ीड में एक और पंचलाइन सीधे तौर पर दिखे. ऐसा करने के बजाय, हमने उसे देखने के लिए थोड़ा नीचे स्क्रोल किया. यह मोबाइल डिवाइस पर ठीक रहेगा. कोड यहां है:

function doGet() {
  var feed =  UrlFetchApp.fetch('http://xkcd.com/rss.xml').getContentText();
  feed = feed.replace(
    /(<img.*?alt="(.*?)".*?>)/g,
    '$1' + new Array(10).join('<br />') + '$2');
  return ContentService.createTextOutput(feed)
    .setMimeType(ContentService.MimeType.RSS);
}

यह थोड़ा मुश्किल लग सकता है, लेकिन इसे आसानी से बांटा जा सकता है. हम ओरिजनल XKCD आरएसएस फ़ीड को फ़ेच करने के लिए, यूआरएल फ़ेच करने की सेवा का इस्तेमाल करते हैं. इसके बाद, हम स्टैंडर्ड JavaScript रेगुलर एक्सप्रेशन का इस्तेमाल करके अपनी ज़रूरत के हिसाब से बदलाव कर सकते हैं. आखिर में, हम बदले गए फ़ीड को TextOutput ऑब्जेक्ट में रैप करते हैं और MIME टाइप को आरएसएस पर सेट करते हैं.

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

स्क्रिप्ट से JSON दिखाया जा रहा है

हम कॉन्टेंट सेवा की मदद से और क्या कर सकते हैं? JSON को दूसरी स्क्रिप्ट या दूसरी वेबसाइटों और सेवाओं पर दिखाने के बारे में क्या ख्याल है! यहां एक आसान स्क्रिप्ट दी गई है, जिससे एक सेवा लागू की जाती है. इसका इस्तेमाल करके कोई भी यह देख सकता है कि कोई कैलेंडर स्लॉट किसी खास समय पर खुला है या नहीं.

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}

पहले की तरह, इसे बिना पहचान वाले वेब ऐप्लिकेशन के तौर पर पब्लिश करें, ताकि यह काम करे. इस मामले में, आपकी नई सेवा के उपयोगकर्ता, सेवा यूआरएल के आखिर में यूआरएल पैरामीटर जोड़कर इसे इस्तेमाल कर सकते हैं. start और end पैरामीटर, जांच करने के लिए एक समयसीमा देते हैं. इसकी जानकारी, स्टैंडर्ड Unix epoch में होती है.

curl -L URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000

सेवा वह JSON कोड दिखाएगी जो यह बताता है कि आपके कैलेंडर में उस रेंज में कुछ भी है या नहीं.

{"available":true}

वेब पेजों में JSONP दिखाना

थोड़ा बदलाव करने पर, आपकी JSON सेवा JSONP बन सकती है. इसका मतलब है कि इसे ब्राउज़र में JavaScript से कॉल किया जा सकता है. नई स्क्रिप्ट यहां दी गई है:

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(
    request.parameters.prefix + '(' + JSON.stringify(result) + ')')
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
}

किसी ब्राउज़र से इस सेवा को कॉल करने के लिए, prefix नाम के एक अतिरिक्त पैरामीटर के साथ ऐसा स्क्रिप्ट टैग बनाएं जिसका src एट्रिब्यूट आपकी सेवा का यूआरएल हो. यह क्लाइंट-साइड JavaScript में मौजूद फ़ंक्शन का नाम है. इसे सेवा से मिलने वाली वैल्यू के साथ कॉल किया जाएगा.

<script src="URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000&prefix=alert"></script>

इस उदाहरण में, ब्राउज़र में सर्विस आउटपुट के साथ एक मैसेज बॉक्स दिखेगा. क्योंकि हम ब्राउज़र के बिल्ट-इन alert() फ़ंक्शन को अपने प्रीफ़िक्स के तौर पर बताते हैं. JavaScript कोड इस तरह दिखेगा:

alert({"available":true})

रीडायरेक्ट

सुरक्षा की वजहों से, कॉन्टेंट सर्विस से मिला कॉन्टेंट script.google.com से नहीं दिखाया जाता. इसके बजाय, इसे script.googleusercontent.com पर एक बार इस्तेमाल होने वाले यूआरएल पर रीडायरेक्ट किया जाता है. इसका मतलब है कि अगर किसी दूसरे ऐप्लिकेशन में डेटा लौटाने के लिए कॉन्टेंट सेवा का इस्तेमाल किया जाता है, तो आपको यह पक्का करना होगा कि एचटीटीपी क्लाइंट को रीडायरेक्ट को फ़ॉलो करने के लिए कॉन्फ़िगर किया गया हो. उदाहरण के लिए, cURL कमांड लाइन यूटिलिटी में, -Lफ़्लैग जोड़ें. इस व्यवहार को चालू करने के तरीके के बारे में ज़्यादा जानकारी के लिए अपने एचटीटीपी क्लाइंट के दस्तावेज़ देखें.