خدمة المحتوى

عند نشر نص برمجي كتطبيق ويب، يتم استدعاء وظائف رد الاتصال الخاصة doGet()وdoPost() عند إجراء طلب في النص البرمجي's. بدلاً من عرض عنصر واجهة مستخدم تم إنشاؤه باستخدام خدمة HTML، يمكن استخدام خدمة المحتوى لعرض محتوى نصي غير معدَّل. يتيح لك ذلك كتابة النصوص البرمجية التي تعمل كـ "services",والاستجابة لطلبات GET وPOST وعرض بيانات بأنواع MIME المختلفة.

الأساسيات

في ما يلي مثال بسيط على خدمة المحتوى:

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

انشر النص البرمجي كتطبيق ويب، باستخدام الخطوات نفسها التي كنت تستخدمها في حال عرض واجهة مستخدم. عند إرسال طلب GET إلى عنوان URL للنص البرمجي، سيتم عرض النص Hello, world!. بالإضافة إلى استخدام النص العادي، تتيح الخدمة أيضًا عرض محتوى ATOM وCSV و iCal وJavaScript وJSON وRSS و vCard و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 لجلب خلاصة RSS الأصلية من XKCD. بعد ذلك، نستخدم تعبير JavaScript عاديًا لإجراء عمليات الاستبدال التي نحتاجها. وأخيرًا، يتم تضمين الخلاصة المعدّلة في كائن TextText، ثم ضبط نوع 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 نطاقًا زمنيًا للتحقق، كما هو محدّد في حقبة Unix العادية.

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 الخاصة بها هي عنوان URL للخدمة، مع معلَمة إضافية تُسمّى prefix. وهذا هو اسم الدالة في JavaScript من جهة العميل والتي سيتم استدعاؤها مع القيمة التي تعرضها الخدمة.

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

سيعرض هذا المثال مربّع رسالة في المتصفح يحتوي على مخرجات الخدمة، حيث إننا نحدد وظيفة alert() المدمجة للمتصفّح كبادئة. سيظهر رمز JavaScript المعروض على النحو التالي:

alert({"available":true})

عمليات إعادة التوجيه

لأسباب تتعلّق بالأمان، لا يتم عرض المحتوى الذي تعرضه خدمة المحتوى من script.google.com، ولكن تتم إعادة توجيهه إلى عنوان URL يُستخدم لمرة واحدة على script.googleusercontent.com. وهذا يعني أنه إذا كنت تستخدم خدمة المحتوى لإعادة البيانات إلى تطبيق آخر، يجب عليك التأكد من ضبط برنامج HTTP لاتباع عمليات إعادة التوجيه. على سبيل المثال، في أداة سطر أوامر cURL، أضِف العلامة -L. راجِع وثائق برنامج HTTP للحصول على المزيد من المعلومات عن كيفية تفعيل هذا السلوك.