Posts

Showing posts from March, 2020

ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

Image
Apps Script มี function UrlFetchApp.fetch() สำหรับเรียก http request ไปที่ service อื่นๆ ได้ ซึ่งสามารถนำมาใช้เรียก API ภายนอกได้เช่นกัน แต่หากเรามีข้อมูลจำนวนมาก และต้องเรียก UrlFetchApp.fetch() หลายๆ ครั้ง จะทำให้ระบบทำงานช้าและเกินข้อจำกัดของ Apps Script ไป (document ระบุไว้ว่าได้ 6 นาที) วันนี้ผมจะมาแนะนำวิธีแก้ปัญหาในกรณี้นี้กันคับ


เมื่อการเรียกทีละ request ไม่ตอบโจทย์ เรื่องเริ่มมาจากผมมีโปรเจกต์ที่มีข้อมูลชื่อโดเมน จำนวนประมาณ 1,400 รายการ ที่ต้องการดึงค่า DNS มาตรวจสอบอะไรบางอย่าง ด้วยการเรียก http request ไปที่
https://dns.google.com/resolve?name=%DOMAIN%  โดยการแทนค่า %DOMAIN% ด้วยโดเมนที่ต้องการ และนำค่าที่ได้จาก API มาทำงานต่อ

หลังจากที่เตรียมชื่อโดเมนทั้ง 1,400 รายการลง array เรียบร้อย ก็เริ่ม process ข้อมูลใน array ทุกตัว โดยแต่ละตัวก็จะมีการเรียก UrlFetchApp.fetch() 1 ครั้ง ผลที่ได้ออกมาคือ
เริ่มรันตอน 2020-03-17 17:41:48.049 script สามารถทำงานจนถึง record ที่ 1047ที่เวลา 2020-03-17 17:49:36.137 เกิด "Script delayed (1.0 min) waiting for quota" เวลาห่างกันประมา…

แนะนำ Dialogflow: การใช้ regex เพื่อดึงข้อมูลด้วย pattern

Image
การสร้าง chatbot engine ด้วย Dialogflow นั้น มีความสะดวกตรงที่ เราสามารถใส่ตัวอย่างข้อความที่ผู้ใช้จะพิมพ์มาคุยกับ bot ลงใน training phrase ระบบจะเรียนรู้จากข้อมูลตัวอย่างนั้นและทำความเข้าใจประโยค ทำให้เมื่อผู้ใช้พิมพ์มาไม่ตรงกับ training phrase ระบบก็ยังสามารถเข้าใจความหมายและโต้ตอบได้อย่างถูกต้อง (อ่านเพิ่มเติม: แนะนำ Dialogflow: Intent, Parameters และ Fulfillment)

ในบางกรณี ข้อมูลที่เราต้องการจากผู้ใช้ ไม่สามารถระบุลงไปใน training phrase ได้โดยตรง เนื่องจากเป็นข้อมูลที่ไม่ตายตัว จึงไม่สามารถใช้วิธีการยกตัวอย่างเพื่อให้ระบบเรียนรู้ได้ เช่น สำหรับ chatbot แจกป๊อบคอร์น สมมติว่า เราจะขอให้ผู้ใช้ใส่เลขบัตรประจำตัวประชาชนมาเพื่อยืนยันตัวตนก่อน จึงจะแจกป๊อปคอร์นให้ จะเห็นว่า ค่าที่ผู้ใช่จะใส่เข้ามานั้นเป็นค่าเฉพาะของแต่ละคนและไม่ซ้ำกันเลย การจะระบุค่านี้ได้เราจะใช้ความสามารถของ regex เข้ามาช่วยครับ

regex หรือ Regular Expression เป็นวิธีการระบุรูปแบบ (pattern) ของตัวอักษรที่เราต้องการค้นหา ซึ่งจะใช้ได้ดีกับการค้นหาข้อมูลที่มีรูปแบบ ในกรณีนี้เราจะใช้ regex เพื่อระบุรูปแบบของเลขบัตรประจำตัวป…