บริการเนื้อหา

เมื่อเผยแพร่สคริปต์เป็นเว็บแอป ฟังก์ชันเรียกกลับแบบพิเศษ doGet()และ doPost() จะถูกเรียกใช้เมื่อใดก็ตามที่มีคําขอไปยัง URL ของสคริปต์ บริการเนื้อหาสามารถใช้เพื่อแสดงผลเนื้อหาที่เป็นข้อความดิบได้ แทนที่จะแสดงผลออบเจ็กต์อินเทอร์เฟซผู้ใช้ที่สร้างขึ้นด้วยบริการ 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 มักตลกขบขันเสมอ แต่คุณไม่สามารถเล่าเรื่องตลกทั้งหมดได้จนกว่าจะวางเมาส์เหนือแถบการ์ตูนเพื่อดูข้อความแสดงแทนเพิ่มเติม ขออภัย คุณไม่สามารถวางเมาส์เหนือเบราว์เซอร์บนอุปกรณ์เคลื่อนที่ วิธีนี้ใช้ไม่ได้

สมมติว่าเราต้องการแก้ไขฟีดเพื่อให้ Punchline เพิ่มเติมอยู่ในฟีดโดยตรง แทนที่จะต้องเลื่อนลงไปเล็กน้อย คุณก็เห็นฟีดนั้น วิธีนี้ใช้งานได้ดีในอุปกรณ์เคลื่อนที่ 'โค้ดมีดังนี้

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 แบบมาตรฐานแทน สุดท้ายเรารวมฟีดที่แก้ไขไว้ในออบเจ็กต์ Textoutput และตั้งค่าประเภท MIME เป็น RSS

หากต้องการดูการทํางานนี้ ให้เผยแพร่สคริปต์เป็นเว็บแอปและตรวจสอบว่าอนุญาตการเข้าถึงแบบไม่ระบุตัวตน (เนื่องจากโปรแกรมอ่าน RSS จะเข้าชมในฐานะผู้ใช้นิรนาม) จากนั้นเพิ่ม URL ของบริการ (ไม่ใช่ฟีด RSS เดิม) ลงในโปรแกรมอ่าน RSS หรือเพียงแค่ไปที่ URL นั้นโดยตรงในเว็บเบราว์เซอร์ เท่านี้ก็เรียบร้อย

การแสดง 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 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 เป็น 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 เพื่อดูข้อมูลเพิ่มเติม เกี่ยวกับวิธีเปิดใช้ลักษณะการทํางานนี้