कॉन्टेंट से जुड़ी सेवा

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

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

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

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

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

आरएसएस फ़ीड दिखाना

चलिए, कुछ और मुश्किल काम करते हैं. जैसे, आरएसएस फ़ीड को फ़िल्टर करना. 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 रेगुलर एक्सप्रेशन का इस्तेमाल करते हैं. आखिर में, हम बदलाव किए गए फ़ीड को TextInput ऑब्जेक्ट में रैप करते हैं और 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 पैरामीटर जांच करने के लिए एक समयसीमा देते हैं. इसके बारे में मानक यूनिक्स युग में बताया गया है.

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);
}

किसी ब्राउज़र से इस सेवा को कॉल करने के लिए, स्क्रिप्ट टैग बनाएं. इसका src एट्रिब्यूट आपकी सेवा का यूआरएल है. इस पैरामीटर में prefix पैरामीटर मौजूद है. यह आपके क्लाइंट-साइड के 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. इस व्यवहार को चालू करने के तरीके के बारे में ज़्यादा जानकारी के लिए, अपने एचटीटीपी क्लाइंट के दस्तावेज़ देखें.