AdvanceDeveloperFeaturedNewbiePHPProgramming Language

เทคนิคการดึงข้อมูลใน HTML สำหรับทำข้อมูล Demo ด้วย phpQuery

บางครั้งตอนที่เราเริ่มทำ Website ใหม่ๆ ในเซิร์ฟเวอร์เทสเราจะใช้ CMS ที่พัฒนามาเองลงข้อมูลแต่ถ้าบางทีข้อมูลมันมากไปก็ลำบากเมื่อมือ ลองใช้ phpQuery ช่วยครับ

เป็น Library ที่น่าสนใจอีกตัวจริงๆ มีเวอร์ชัน jQuery และ Java ด้วยแต่เบื้องต้นเอาเจ้านี่มาให้ลองเล่นดูก่อน ตัวที่ทดสอบนั้นผมใช้ phpQuery แบบ One File ครับ นั่นคือเวอร์ชัน ใช้ ไฟล์เดียวในการเรียกคำสั่ง โดยการไปดาวน์โหลดที่นี่

Screen Shot 2557-07-29 at 5.22.07 PM
ดาวน์โหลดตัว onefile.zip มาใช้ครับ

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 เอาก็ได้ถ้าแม่นจริงๆนะครับ

Screen Shot 2557-07-29 at 5.27.55 PM

คำอธิบายจะดูได้จากตัวอย่างข้างล่าง นั่นคือ 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);

?>

ลอง รันดูผลลัพธ์จะได้แบบนี้

Screen Shot 2557-07-29 at 5.35.16 PM
ผลลัพธ์

มาสร้าง 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);
?>
Screen Shot 2557-07-29 at 5.35.23 PM
ใช้กับฐานข้อมูล

ทดสอบอีกครั้ง มีคำว่า SUCCESS

ไปดูที่ MySQL กันหน่อย

Screen Shot 2557-07-29 at 5.19.36 PM

ปรากฏว่ามีข้อมูลแล้วครับ

เรียบร้อย
เรียบร้อย

ตัวอย่างการใช้ phpQuery นี้เหมาะกับ การทดสอบระบบที่จะต้องมี content ปรากฏขึ้นแล้วคนทำ Demo ขี้เกียจจะ Copy บทความครับ ในกรณีที่ลูกค้าอยากดูภาพรวมแบบเต็มๆ แต่ถ้าจะเอาไว้ใช้ ขโมยข้อมูลเว็บมาลงล่ะก็ไม่ควรนะครับ

แบบฝึกหัดของบทเรียนนี้

แนะนำให้ลองไปใช้ phpQuery กับหน้า http://www.google.co.th/movies ดูครับ คุณอาจจะได้เว็บแอพพลิเคชันทำรอบหนังแบบ Realtime ได้เลยตัวหนึ่ง เอาไปใช้กับ Mobile ก็ได้นะ

 

 

 

 

 

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน