Arduino:
การวิเคราะห์ HTML
วิธีการ:
การแยกข้อมูล HTML บน Arduino โดยทั่วไปต้องการไลบรารีที่มีขนาดเล็กเนื่องจากทรัพยากรอุปกรณ์มีจำกัด ตัวเลือกยอดนิยมสำหรับการเว็บสคริปก้อปและการแยกข้อมูลคือการใช้ไลบรารี ESP8266HTTPClient
และ ESP8266WiFi
สำหรับ ESP8266 หรือตัวที่ใช้กับ ESP32 ที่เทียบเท่า เนื่องจากมีการสนับสนุนโดยตรงสำหรับความสามารถ Wi-Fi และโปรโตคอล HTTP นี่คือตัวอย่างพื้นฐานสำหรับการดึงและแยกข้อมูล HTML โดยสมมติว่าคุณกำลังทำงานกับ ESP8266 หรือ ESP32:
ก่อนอื่น ให้เพิ่มไลบรารีที่จำเป็น:
#include <ESP8266WiFi.h> // สำหรับ ESP8266
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
// ใช้ไลบรารีต่างๆ สำหรับ ESP32 ถ้าใช้ ESP32
const char* ssid = "yourSSID";
const char* password = "yourPASSWORD";
เชื่อมต่อกับเครือข่าย Wi-Fi ของคุณ:
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("กำลังเชื่อมต่อ...");
}
}
ทำการร้องขอ HTTP และแยกข้อมูล HTML ชิ้นง่าย:
void loop() {
if (WiFi.status() == WL_CONNECTED) { //ตรวจสอบสถานะการเชื่อมต่อ WiFi
HTTPClient http; //ประกาศอ็อบเจคของคลาส HTTPClient
http.begin("http://example.com"); //ระบุปลายทางของคำร้องขอ
int httpCode = http.GET(); //ส่งคำร้องขอ
if (httpCode > 0) { //ตรวจสอบรหัสที่คืนกลับ
String payload = http.getString(); //รับ payload ของการตอบรับคำร้องขอ
Serial.println(payload); //พิมพ์ payload ของการตอบรับ
// แยกส่วนเฉพาะ เช่น การคัดลอกหัวเรื่องจาก payload
int titleStart = payload.indexOf("<title>") + 7; // +7 เพื่อข้ามแท็ก "<title>"
int titleEnd = payload.indexOf("</title>", titleStart);
String pageTitle = payload.substring(titleStart, titleEnd);
Serial.print("หัวเรื่องของเพจ: ");
Serial.println(pageTitle);
}
http.end(); //ปิดการเชื่อมต่อ
}
delay(10000); //ทำการร้องขอทุก 10 วินาที
}
ตัวอย่างผลลัพธ์ (โดยสมมติว่า http://example.com มีโครงสร้าง HTML ง่าย):
กำลังเชื่อมต่อ...
...
หัวเรื่องของเพจ: ตัวอย่างโดเมน
ตัวอย่างนี้แสดงการดึงหน้า HTML และการคัดลอกเนื้อหาที่อยู่ในแท็ก <title>
สำหรับการแยกข้อมูล HTML ที่ซับซ้อนมากขึ้น พิจารณาใช้การแสดงออกปกติ (ด้วยความระมัดระวังเนื่องจากข้อจำกัดด้านหน่วยความจำ) หรือฟังก์ชันการจัดการสตริงเพื่อเลื่อนผ่านโครงสร้าง HTML การแยกข้อมูลที่ซับซ้อนอาจต้องการวิธีการที่ซับซ้อนยิ่งขึ้น รวมถึงอัลกอริธึมการแยกข้อมูลที่กำหนดเอง ตามโครงสร้าง HTML ที่คุณกำลังจัดการ ด้วยเหตุผลที่สภาพแวดล้อม Arduino มาตรฐานไม่รวมไลบรารีการแยกข้อมูล HTML ที่ใช้งานได้เลย