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

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

สมมติว่าเราต้องการแก้ไขฟีดเพื่อให้ช็อตเด็ดส่วนนั้นอยู่ในฟีด โดยตรง ให้คุณเลื่อนหน้าจอลง 2-3 ระดับ แทนการวางเมาส์เหนือโฆษณา นั่น จะทำงานได้ดีบนอุปกรณ์เคลื่อนที่ ต่อไปนี้เป็นรหัส:

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 อ่านหรือเข้าชมโดยตรงในเว็บเบราว์เซอร์ เท่านี้ก็เรียบร้อย

การแสดง JSON จากสคริปต์

เราสามารถทำอะไรกับบริการเนื้อหาได้อีกบ้าง ลองแสดงผล JSON ไปยังที่อื่นด้วยไหม ของ Google หรือเว็บไซต์และบริการอื่นๆ ต่อไปนี้คือสคริปต์ง่ายๆ ที่ใช้ ที่ทุกคนสามารถใช้งานเพื่อดูว่าช่วงเวลาของปฏิทินเปิดอยู่หรือไม่

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