خدمة المحتوى

عندما يتم نشر نص برمجي كتطبيق ويب، فإن دوال الاستدعاء الخاصة يتم استدعاء doGet() وdoPost() كلما تم تقديم طلب إلى نص عنوان URL. بدلاً من عرض كائن واجهة مستخدم تم إنشاؤه باستخدام خدمة HTML، يمكن استخدام Content Service لعرض رسالة أولية المحتوى النصي. يتيح لك ذلك كتابة النصوص البرمجية التي تكون بمثابة "خدمات"، الاستجابة لطلبات GET وPOST وتقديم بيانات من أنواع MIME مختلفة.

الأساسيات

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

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

نشر النص البرمجي كتطبيق ويب، باستخدام الخطوات نفسها التي كنت تستخدمها إذا كنت تعرض واجهة مستخدم. فعندما يتم عند إجراء طلب GET على عنوان URL للنص البرمجي، فإن النص Hello, world! سيتم عاد. بالإضافة إلى النص العادي، تتيح الخدمة أيضًا عرض ATOM، المحتوى بتنسيق CSV وExcel و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);
}

قد يبدو ذلك صعبًا، ولكنه ينقسم إلى أجزاء بسيطة. نستخدم دالة sort_values خدمة جلب عنوان URL لجلب عنوان URL الأصلي خلاصة RSS في XKCD. ثم نستخدم تعبير جافا سكريبت عاديًا لإجراء والبدائل التي نحتاجها. أخيرًا، نختتم الخلاصة المعدّلة كائن 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، ما يعني أنّه يمكن تسميتها من 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 للاطّلاع على مزيد من المعلومات. تتضمّن معلومات حول طريقة تفعيل هذا السلوك.