วันจันทร์ที่ 21 มีนาคม พ.ศ. 2554

ดึงข้อมูลจากเว็บโดยอัตโนมัติด้วย PL/SQL

หลายครั้งที่ผมมีความจำเป็นต้องดึงข้อมูลจากหน้าเว็บบางเว็บเข้ามาเก็บในฐานข้อมูล เลยต้องมาคิดหาวิธีว่าจะทำอย่างไรที่จะดึงข้อมูลมาได้อย่างรวดเร็วที่สุดนอกจากวิธีแบบลูกทุ่งเลยก็คือการไปที่หน้าเว็บนั้น ๆ แล้วก็ทำการ Copy&Paste ซึ่งก็จะเสียเวลาทำมาหากินนานมาก ยิ่งถ้ามีจำนวนข้อมูลมาก ๆ แล้วไม่ต้องพูดถึง

โชคดีที่ภาษา PL/SQL ของ Oracle มีฟังก์ชันที่ช่วยให้เราสามารถดึงข้อมูลจากเว็บได้อย่างรวดเร็วโดยอัตโนมัติ โดยฟังก์ชันเหล่านี้จะอยู่ในแพ็คเก็จ UTL_HTTP ซึ่งมากับ Database อยู่แล้ว ดังนั้นตัวอย่างนี้จะแสดงให้เห็นถึงการดึงข้อมูลจากเว็บอย่างง่าย ๆ ตามมาเลยครับ






ตัวอย่างนี้จะเป็นการดึงข้อมูลจากเว็บ http://www.w3schools.com/xpath/books.xml ซึ่งเป็นข้อมูลที่อยู่ในรูปแบบ XML แสดงรายชื่อหนังสือ โดยเริ่มจากใส่ค่า URL Address ของเว็บที่เราต้องการเข้าไปที่ตัวแปร UTL_HTTP.begin_request หลังจากนั้นคำสั่ง UTL_HTTP.read_text จะทำการอ่านข้อมูลมาเก็บลงในตัวแปร text ซึ่งกำหนดไว้เป็น VARCHAR2 ขนาด 32760 ไบต์ หลังจากนั้นจึงทำการแสดงผลลัพธ์ที่อยู่ในตัวแปร text ด้วยคำสั่ง DBMS_OUTPUT.put_line ออกมาทางจอภาพ ดังรูป




ถึงตรงนี้เราสามารถที่จะจัดการกับข้อมูลต่อได้โดยอาจจะใช้ฟังก์ชัน substr เพื่อตัดข้อความตรงตำแหน่งที่ต้องการเพื่อให้ได้ข้อมูลตามต้องการ ด้วยตัวอย่างโค้ดสั้น ๆ ง่าย ๆ เพียงเท่านี้เราก็สามารถดึงข้อมูลจากเว็บมาใช้งานได้ แต่ตัวอย่างนี้ก็ยังมีข้อจำกัดอยู่เนื่องจากตัวแปร text จะเก็บข้อมูลได้เพียง 32760 ไบต์เท่านั้น ดังนั้นหากข้อมูล html source ที่ได้จากเว็บมีขนาดข้อมูลมากกว่าตัวแปร text จะรับได้ก็จะเกิด error ขึ้น