LINE Bot—แจ้งเตือนประกาศดับไฟฟ้าแบบอัตโนมัติ ด้วยวิชามหาเวทดูดดาว (Web Scraping)

เนื่องจากได้อ่านบทความ รายงานราคาทองผ่าน LINE Chatbot แบบอัตโนมัติ ด้วยเทคนิค Web Scraping ผมเลยจะทำการลอกการบ้านด้วยการมาทดลองตั้งโจทย์ของตัวเองนั่นคือ การแจ้งเตือนประกาศดับไฟฟ้าเนื่องจากมีการปฏิบัติงาน ในพื้นที่จังหวัดที่ต้องการ โดยการแจ้งเตือนประกาศดับไฟฟ้าเนื่องจากมีการปฏิบัติงาน จะมีประกาศไว้ในหน้าเว็บไซต์ของหน่วยงานการไฟฟ้าที่รับผิดชอบ โดยบทความนี้ผมจะยกตัวอย่างจากประกาศของการไฟฟ้าส่วนภูมิภาค ที่มีประกาศของทุกจังหวัดยกเว้น กทม. และพื้นที่ปริมณฑล

และด้วยหน่วยงานการไฟฟ้า ยังไม่มี API เกี่ยวกับข้อมูลที่ต้องการให้ใช้งาน ผมเลยจะใช้เทคนิค Web Scraping ในการดึงข้อมูลจากหน้าเว็บไซต์มาเก็บไว้ในฐานข้อมูล และกำหนดให้ดึงข้อมูลการแจ้งเตือนประกาศดับไฟฟ้าจากฐานข้อมูล ที่จะมีการปฏิบัติงานภายใน 24 ชม. ในพื้นที่จังหวัดที่ต้องการ มารายงานผ่าน LINE Bot ทุกเช้า ก่อนวันปฏิบัติงานของเจ้าหน้าที่ อย่างน้อยจะได้เตรียมตัวได้ล่วงหน้า 24 ชม.

5 ขั้นตอนในการพัฒนา

  • เตรียม LINE Chatbot ที่พัฒนาด้วย Cloud Functions
  • ตั้งเวลาดึงข้อมูลด้วย Cloud Scheduler (Cron Job)
  • ดึงข้อมูลแจ้งเตือนประกาศดับไฟฟ้าด้วยเทคนิค Web Scraping
  • เพิ่มข้อมูลแจ้งเตือนประกาศดับไฟฟ้าลงในฐานข้อมูล Cloud Firestore
  • ตั้งเวลารายงานแจ้งเตือนประกาศดับไฟฟ้าผ่าน LINE Chatbot ด้วย Cloud Scheduler (Cron Job)


หมายเหตุ: บทความนี้เขียนขึ้นโดยมีวัตถุประสงค์เพื่อการศึกษาเท่านั้น


1. เตรียม LINE Chatbot ที่พัฒนาด้วย Cloud Functions

2. ตั้งเวลาดึงข้อมูลด้วย Cloud Scheduler (Cron Job)

สำหรับข้อ 1 – 2 สามารถทำตามบทความบทความ รายงานราคาทองผ่าน LINE Chatbot แบบอัตโนมัติ ด้วยเทคนิค Web Scraping ได้เลยครับ


3. ดึงข้อมูลแจ้งเตือนประกาศดับไฟฟ้าด้วยเทคนิค Web Scraping

3.1 เมื่อเข้าไปดูประกาศดับไฟฟ้าเนื่องจากมีการปฏิบัติงานของการไฟฟ้าส่วนภูมิภาคที่ https://www.pea.co.th/WebApplications/Outage/New/Index.aspx จะมีข้อมูลจังหวัด พื้นที่ วัน และเวลาปฏิบัติงาน และสามารถคลิ๊กเข้าไปดูรายละเอียดของแต่ละรายการได้

3.2 ก่อนจะทำ Web Scraping กด Ctrl + Shift + i เพื่อจะทำการ Inspect Element ที่ต้องการดึงข้อมูลมาใช้งาน

ข้อมูลทั้งหมดอยู่ในรูปแบบตารางที่มี element id = “tblOutage”

3.3 ทำการติดตั้ง Axios และ Cheerio

3.4 เขียนฟังก์ชั่น scraper เพื่อดึงข้อมูลจากหน้าประกาศดับไฟฟ้าเนื่องจากมีการปฏิบัติงานของการไฟฟ้าส่วนภูมิภาค โดยมีฟังก์ชั่น dateToTime ทำการแปลงข้อมูลวันที่เป็น miiliseconds เพื่อให้ง่ายต่อการเรียกจากฐานข้อมูล โดยฟังก์ชั่น scraper จะส่งผลลัพธ์ออกมาเป็น Array ของประกาศที่มีวันปฏิบัติมากกว่าหรือเท่ากับวันที่ทำการดึงข้อมูล นั่นคือตัวแปร today


4. เพิ่มข้อมูลแจ้งเตือนประกาศดับไฟฟ้าลงในฐานข้อมูล Cloud Firestore

4.1 เขียนฟังก์ชั่น getPeaOutage เพื่อทำการดึงข้อมูลจากหน้าประกาศดับไฟฟ้า ทุกๆ วัน เวลาตี 3 และทำการบันทึกข้อมูลที่ได้ใน Cloud Firestore โดยหากหน้าประกาศมีการแก้ไขหรืออัพเดทข้อมูล เราก็จะได้ข้อมูลที่แก้ไขและอัพเดทแล้วด้วยครับ


5. ตั้งเวลารายงานแจ้งเตือนประกาศดับไฟฟ้าผ่าน LINE Chatbot ด้วย Cloud Scheduler (Cron Job)

5.1 เขียนฟังก์ชั่น messageBubble สำหรับการสร้าง Bubble ในข้อความ Flex ประเภท Carousel โดยจะมีได้สูงสุด 12 Bubble

5.2 เขียนฟังก์ชั่น pushMessage ในการส่งข้อความไปให้ผู้ใช้แบบ 1-1 หรือลงในกลุ่มที่ LINE Bot เป็นสมาชิกอยู่ ก็ให้ใช้ GROUP_ID แทน USER_ID

5.3 เขียนฟังก์ชั่น outageBotPushMessage โดยจะเป็นการตั้งเวลาให้รายงานทุกๆ วัน เวลา 08.00 น. หากว่ามีประกาศแจ้งเตือนประกาศดับไฟฟ้าที่จะทำงานในจังหวัดที่ต้องการล่วงหน้า 24 ชม. นั่นคือทุกๆ เช้าหากว่าวันพรุ่งนี้มีการปฏิบัติงาน ผมก็จะได้รับประกาศแจ้งเตือนเข้ามาเพื่อให้เตรียมตัวได้ใน 24 ชม.


มาดูผลลัพธ์ที่ได้กันครับ


ท้ายสุด เพื่อนๆ สามารถนำไปต่อยอด โดยให้ผู้ใช้ส่งข้อความมาขอข้อมูลเอง จากนั้นให้ Chatbot ไปดึงข้อมูลจาก Database ไปตอบหรือจะทำการให้ผู้ใช้งานลงทะเบียนพื้นที่จังหวัดที่ต้องการรับการแจ้งเตือน แล้วทำการ Broadcast ไปหากลุ่มผู้ใช้ตามพื้นที่จังหวัดต่างๆ กันครับ ส่วนโค้ดฉบับสมบูรณ์ผมเตรียมมาให้ใน Repo ด้านล่างนี้เพื่อนๆ สามารถไป Clone เล่นกันได้ตามต้องการครับผม Happy Coding…👨‍💻👨‍💻👨‍💻

Repo Clone 👉👉👉 https://github.com/ChaiyachetU/Power-Outage-LINE-Bot.git


ฝากร้านหนังสือมือสองของผมด้วยครับ เป็นหนังสือซื้อมาอ่านเอง แล้วต้องการขายต่อในราคาที่เป็นกันเอง เพื่อนๆ ที่สนใจสามารถติดตามหนังสือที่จะขาย และสั่งซื้อได้ที่ https://shop.line.me/@921ijoic

โปรโมชั่น คูปองส่วนลด และดีล ที่ดีที่สุดของร้านค้าออนไลน์กว่า 300 แบรนด์พร้อมรับเงินคืนจาก ShopBack
https://bit.ly/3c4tlmV

Ruk-Com จดโดเมน-เช่าโฮสต์ ราคาประหยัด พร้อมให้บริการใน 1 นาที
http://bit.ly/36q8A12