Layanan Konten

Saat skrip dipublikasikan sebagai aplikasi web, fungsi callback khusus doGet() dan doPost() dipanggil setiap kali permintaan dibuat ke URL skrip. Daripada menampilkan objek antarmuka pengguna yang dibuat dengan layanan HTML, Layanan konten dapat digunakan untuk menampilkan konten tekstual mentah. Hal ini memungkinkan Anda menulis skrip yang berfungsi sebagai "layanan", yang merespons permintaan GET dan POST serta menyajikan data dari berbagai jenis MIME.

Dasar-dasar

Berikut contoh sederhana dari layanan Konten:

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

Deploy skrip sebagai aplikasi web, menggunakan langkah yang sama seperti yang Anda lakukan jika menayangkan antarmuka pengguna. Saat permintaan GET dibuat ke URL skrip, teks Hello, world! akan ditampilkan. Selain teks biasa, layanan ini juga mendukung ditampilkannya konten ATOM, CSV, iCal, JavaScript, JSON, RSS, Vulkan, dan XML.

Menyajikan feed RSS

Mari kita coba sesuatu yang sedikit lebih rumit seperti memfilter feed RSS. Komik XKCD selalu lucu, tetapi Anda tidak bisa mendapatkan lelucon lengkapnya kecuali Anda mengarahkan kursor ke strip komik untuk melihat teks alternatif tambahan. Sayangnya, Anda tidak dapat mengarahkan kursor di browser seluler, sehingga cara ini tidak berfungsi.

Misalnya, kita ingin mengedit feed sehingga punchline ekstra ada di feed secara langsung, dan alih-alih mengarahkan kursor, Anda hanya men-scroll ke bawah sedikit untuk melihatnya. Itu akan berfungsi dengan baik di perangkat seluler. Berikut kodenya:

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

Hal ini mungkin terlihat rumit, tetapi dapat dipecah menjadi beberapa bagian yang sederhana. Kami menggunakan layanan Pengambilan URL untuk mengambil feed RSS XKCD asli. Kemudian, kita menggunakan ekspresi reguler JavaScript standar untuk membuat substitusi yang dibutuhkan. Terakhir, kami menggabungkan feed yang diedit dalam objek TextOutput dan menetapkan jenis MIME ke RSS.

Untuk melihat penerapannya, publikasikan skrip sebagai aplikasi web, pastikan Anda mengizinkan akses anonim (karena pembaca RSS Anda akan mengunjunginya sebagai pengguna anonim). Kemudian, tambahkan URL layanan (bukan feed RSS asli) ke pembaca RSS Anda atau cukup kunjungi langsung di browser web. Selesai.

Menyajikan JSON dari skrip

Apa lagi yang dapat kita lakukan dengan layanan Konten? Bagaimana cara menyajikan JSON ke skrip atau situs dan layanan lain! Berikut adalah skrip sederhana yang mengimplementasikan layanan yang dapat digunakan siapa saja untuk melihat apakah slot kalender terbuka pada waktu tertentu.

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

Seperti sebelumnya, publikasikan aplikasi ini sebagai aplikasi web anonim untuk membuatnya berfungsi. Dalam hal ini, pengguna layanan baru Anda dapat menggunakannya dengan menambahkan parameter URL ke akhir URL layanan. Parameter start dan end memberikan rentang waktu untuk diperiksa, yang ditentukan dalam epoch Unix standar.

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

Layanan akan menampilkan JSON yang melaporkan apakah Anda memiliki sesuatu di kalender dalam rentang tersebut.

{"available":true}

Menayangkan JSONP di halaman web

Dengan sedikit perubahan, layanan JSON dapat menjadi JSONP, yang berarti layanan tersebut dapat dipanggil dari JavaScript di browser. Berikut skrip barunya:

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

Untuk memanggil layanan ini dari browser, buat tag skrip yang atribut src-nya merupakan URL layanan Anda, dengan parameter tambahan yang disebut prefix. Ini adalah nama fungsi di JavaScript sisi klien Anda yang akan dipanggil dengan nilai yang ditampilkan oleh layanan.

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

Contoh ini akan menampilkan kotak pesan di browser dengan output layanan, karena kita menentukan fungsi alert() bawaan browser sebagai awalan. Kode JavaScript yang ditampilkan akan terlihat seperti ini:

alert({"available":true})

Pengalihan

Untuk alasan keamanan, konten yang ditampilkan oleh layanan Konten tidak ditayangkan dari script.google.com, melainkan dialihkan ke URL sekali pakai di script.googleusercontent.com. Artinya, jika menggunakan layanan Konten untuk menampilkan data ke aplikasi lain, Anda harus memastikan bahwa klien HTTP dikonfigurasi untuk mengikuti pengalihan. Misalnya, di utilitas command line cURL, tambahkan flag -L. Periksa dokumentasi untuk klien HTTP Anda guna mendapatkan informasi selengkapnya tentang cara mengaktifkan perilaku ini.