บางครั้งตอนที่เราเริ่มทำ Website ใหม่ๆ ในเซิร์ฟเวอร์เทสเราจะใช้ CMS ที่พัฒนามาเองลงข้อมูลแต่ถ้าบางทีข้อมูลมันมากไปก็ลำบากเมื่อมือ ลองใช้ phpQuery ช่วยครับ
เป็น Library ที่น่าสนใจอีกตัวจริงๆ มีเวอร์ชัน jQuery และ Java ด้วยแต่เบื้องต้นเอาเจ้านี่มาให้ลองเล่นดูก่อน ตัวที่ทดสอบนั้นผมใช้ phpQuery แบบ One File ครับ นั่นคือเวอร์ชัน ใช้ ไฟล์เดียวในการเรียกคำสั่ง โดยการไปดาวน์โหลดที่นี่
https://code.google.com/p/phpquery/downloads/list
แตก Zip ไฟล์ออกมาจะได้ไฟล์หนึ่งทำการ Rename เป็น phpquery.php
วิธีใช้ก็คือ สร้าง Virtual Directory ขึ้นมาก่อนแล้วก็สร้างไฟล์ index.php ของเราขึ้นมา ตัวอย่างของผมคือ ผมจะเก็บข้อมูลหนังจากเว็บไซต์ Siamzone.com เป็นตัวอย่างแล้วกันโดยหน้าที่ต้องการดึงข้อมูลคือ หน้านี้
http://www.siamzone.com/movie/m/7115
การทำงานของ phpQuery จะเหมือน DOM ครับคือ ไต่ไปตาม Attrbute ของ Tag HTML อีกทีเพื่อไปเอาค่ามา ดังนั้นตัวอย่างนี้ผมจะเอาค่า ชื่อหนัง และ คำอธิบายมาใช้ก่อน ซึ่งต้องใช้ Inspector Chrome มาช่วย หรือจะ View source เอาก็ได้ถ้าแม่นจริงๆนะครับ
คำอธิบายจะดูได้จากตัวอย่างข้างล่าง นั่นคือ Div ที่มี id ว่า “thai_synopsis” ส่วนชื่อหนังผมะดึงจาก Title Tag ของหน้าเพจ URL นี้จากตัวอย่างที่ว่ามาเขียนคำสั่งนี้ครับ
<?php require ('phpquery.php'); $file = 'http://www.siamzone.com/movie/m/7115'; phpQuery::newDocumentFileHTML($file); $titleElement = pq('title'); $container = pq('#thai_synopsis'); echo $sp=strip_tags($container); ?>
ลอง รันดูผลลัพธ์จะได้แบบนี้
มาสร้าง MySQL Database กันหน่อยดีกว่า ผมสร้างตารางที่ชื่อว่า movies ขึ้นมา สร้าง Columns ขึ้นมา 2 ช่องคือ title และ description ตามคำสั่งนี้ก็ได้
CREATE TABLE IF NOT EXISTS `theatre` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) COLLATE utf8_bin NOT NULL, `description` text COLLATE utf8_bin, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
หลังจากนั้นก็ไปสร้างคำสั่งเชื่อมต่อ MySQL แล้วทำการ Insert ค่าลงในฐานข้อมูลครับ
$objectconnect = mysql_connect("localhost","root","") or die("Error Connect to Database"); $objectdatabase = mysql_select_db("movies"); mysql_query("SET CHARACTER SET UTF8 "); $sql = "INSERT INTO theatre "; $sql .="(title,description) "; $sql .="VALUES "; $sql .="('".$title."','".$sp."') "; $query = mysql_query($sql); if($query) { echo "SUCCESS ".$sql.""; } mysql_close($objectconnect);
คำสั่งโดยภาพรวมหน้า index.php ก็จะประกอบด้วย
<?php require ('phpquery.php'); $file = 'http://www.siamzone.com/movie/m/7115'; phpQuery::newDocumentFileHTML($file); $titleElement = pq('title'); $container = pq('#thai_synopsis'); echo $sp=strip_tags($container); $title = $titleElement->html(); $objectconnect = mysql_connect("localhost","root","") or die("Error Connect to Database"); $objectdatabase = mysql_select_db("movies"); mysql_query("SET CHARACTER SET UTF8 "); $sql = "INSERT INTO theatre "; $sql .="(title,description) "; $sql .="VALUES "; $sql .="('".$title."','".$sp."') "; $query = mysql_query($sql); if($query) { echo "SUCCESS ".$sql.""; } mysql_close($objectconnect); ?>
ทดสอบอีกครั้ง มีคำว่า SUCCESS
ไปดูที่ MySQL กันหน่อย
ปรากฏว่ามีข้อมูลแล้วครับ
ตัวอย่างการใช้ phpQuery นี้เหมาะกับ การทดสอบระบบที่จะต้องมี content ปรากฏขึ้นแล้วคนทำ Demo ขี้เกียจจะ Copy บทความครับ ในกรณีที่ลูกค้าอยากดูภาพรวมแบบเต็มๆ แต่ถ้าจะเอาไว้ใช้ ขโมยข้อมูลเว็บมาลงล่ะก็ไม่ควรนะครับ
แบบฝึกหัดของบทเรียนนี้
แนะนำให้ลองไปใช้ phpQuery กับหน้า http://www.google.co.th/movies ดูครับ คุณอาจจะได้เว็บแอพพลิเคชันทำรอบหนังแบบ Realtime ได้เลยตัวหนึ่ง เอาไปใช้กับ Mobile ก็ได้นะ