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

जब स्क्रिप्ट को वेब ऐप्लिकेशन के तौर पर पब्लिश किया जाता है, तो खास कॉलबैक फ़ंक्शन जब भी स्क्रिप्ट कीdoGet()doPost() यूआरएल. उस यूज़र इंटरफ़ेस ऑब्जेक्ट को लौटाने के बजाय जिसे HTML सेवा, कॉन्टेंट सेवा का इस्तेमाल, रॉ कॉन्टेंट वापस करने के लिए किया जा सकता है टेक्स्ट वाला कॉन्टेंट. इससे आपको "सेवाओं" के तौर पर काम करने वाली स्क्रिप्ट लिखने की सुविधा मिलती है, 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);
}

पहले की तरह ही, इसे पहचान छिपाकर वेब ऐप्लिकेशन के तौर पर पब्लिश करें, ताकि यह काम करे. इस मामले में, उपयोगकर्ता आपकी नई सेवा का उपयोग सेवा URL. 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);
}

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