سرویس محتوا

هنگامی که یک اسکریپت به عنوان یک برنامه وب منتشر می شود، هر زمان که درخواستی برای URL اسکریپت ارسال شود، توابع ویژه doGet() و doPost() فراخوانی می شوند. به جای بازگرداندن یک شی رابط کاربری ایجاد شده با سرویس HTML ، از سرویس Content می توان برای بازگرداندن محتوای متنی خام استفاده کرد. این به شما امکان می دهد اسکریپت هایی بنویسید که به عنوان "سرویس" عمل می کنند، به درخواست های GET و POST پاسخ می دهند و داده هایی از انواع مختلف MIME را ارائه می دهند.

اصول اولیه

در اینجا یک مثال ساده از سرویس محتوا آورده شده است:

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

اسکریپت را به عنوان یک برنامه وب با استفاده از همان مراحلی که اگر به یک رابط کاربری سرویس می‌دادید، اجرا کنید . هنگامی که یک درخواست GET به URL اسکریپت ارسال می شود، متن Hello, world! بازگردانده خواهد شد. علاوه بر متن ساده، این سرویس همچنین از بازگرداندن محتوای ATOM، CSV، iCal، JavaScript، JSON، RSS، کارت مجازی و XML نیز پشتیبانی می‌کند.

ارائه فیدهای RSS

بیایید چیز کمی پیچیده تر مانند فیلتر کردن فید RSS را امتحان کنیم. کمیک‌های 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);
}

ممکن است مشکل به نظر برسد، اما به بخش های ساده تقسیم می شود. ما از سرویس URL Fetch برای واکشی فید اصلی XKCD RSS استفاده می کنیم. سپس از یک عبارت معمولی جاوا اسکریپت برای ایجاد جایگزینی های مورد نیاز خود استفاده می کنیم. در نهایت، فید ویرایش شده را در یک شی TextOutput قرار می دهیم و نوع MIME را روی RSS قرار می دهیم.

برای مشاهده عملی این موضوع، اسکریپت را به عنوان یک برنامه وب منتشر کنید، مطمئن شوید که دسترسی ناشناس را مجاز می‌کنید (زیرا خواننده RSS شما به عنوان یک کاربر ناشناس از آن بازدید می‌کند). سپس URL سرویس (نه فید اصلی RSS) را به خواننده RSS خود اضافه کنید یا فقط مستقیماً در یک مرورگر وب از آن بازدید کنید. خودشه!

سرویس 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 به انتهای URL سرویس از آن استفاده کنند. پارامترهای start و end یک محدوده زمانی برای بررسی، مشخص شده در دوره استاندارد یونیکس، ارائه می دهند.

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

این سرویس JSON را برمی گرداند که گزارش می دهد آیا چیزی در آن محدوده در تقویم خود دارید یا خیر.

{"available":true}

ارائه JSONP در صفحات وب

با کمی تغییر، سرویس JSON شما می تواند به JSONP تبدیل شود، به این معنی که می توان آن را از جاوا اسکریپت در مرورگر فراخوانی کرد. اینم اسکریپت جدید:

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 آن URL سرویس شما باشد، با یک پارامتر اضافی به نام prefix . این نام تابعی در جاوا اسکریپت سمت کلاینت شما است که با مقدار بازگردانده شده توسط سرویس فراخوانی می شود.

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

این مثال یک جعبه پیام را در مرورگر با خروجی سرویس نشان می دهد، زیرا ما تابع alert() داخلی مرورگر را به عنوان پیشوند خود مشخص می کنیم. کد جاوا اسکریپت برگشتی به شکل زیر خواهد بود:

alert({"available":true})

تغییر مسیرها

به دلایل امنیتی، محتوای بازگردانده شده توسط سرویس محتوا از script.google.com ارائه نمی شود، بلکه در عوض به یک URL یک بار مصرف در script.googleusercontent.com هدایت می شود. این بدان معنی است که اگر از سرویس Content برای برگرداندن داده ها به برنامه دیگری استفاده می کنید، باید مطمئن شوید که سرویس گیرنده HTTP برای دنبال کردن تغییر مسیرها پیکربندی شده است. به عنوان مثال، در ابزار خط فرمان cURL، پرچم -L اضافه کنید. برای اطلاعات بیشتر در مورد نحوه فعال کردن این رفتار، اسناد مربوط به سرویس گیرنده HTTP خود را بررسی کنید.