Monday, April 29, 2013

ใช้ CURL สำหรับเปิดหรือเก็บคอนเท็นต์ของเว็บไซต์อื่น ๆ

บางครั้งหลายเว็บไซต์อาจจะมีการเขียนสคริปต์ไปดึงข้อมูลคอนเท้นต์จากเว็บไซต์อื่น ๆ โดยปกติจะมี 2-3 วิธี (ใน PHP) คือ
1. ใช้ฟังก์ชั่น file_get_contents(“http://www.livescore.com”);
2. ใช้ฟังก์ชั่น socket คือ fsockopen(“http://www.livescore.com”, “80″);
3. วิธีสุดท้ายซึ่งเป็นวิธีที่ผมคิดว่าดีที่สุด คือใช้ ฟังก์ชั่นของ CURL วิธีนี้มีการใช้กันมากในเรื่องของการใช้ web service ใน PHP4
ข้อกำหนดพื้นฐานคือเว็บเซิร์ฟเวอร์ที่ใช้ทำต้องเปิดให้ใช้งาน extension curl ซะก่อน สำหรับคนที่เช่าโฮสต์ ก็เขียนเมลบอกให้ แอ็ดมินเปิดให้ก็ได้, สำหรับคนที่จะลองกับเว็บเซิร์ฟเวอร์ในเครื่องที่บ้าน ให้ไปแก้ไขไฟล์ php.ini หาคำว่า “;extension=php_curl.dll” ให้เอา “;” ออก แล้วทำการรีสตาร์ท apache ใหม่
ต่อไปมาดูกันว่า extension curl ได้ถูกเปิดใช้หรือยัง ให้ไปไปดูไฟล์ PHPINFO จะเห็นตามรูปด้านล่างนี้

หลังจากทุกอย่างเรียบร้อยแล้ว ที่นี่เราจะมาเขียนเก็บคอนเท็นต์จาก livescore.com กัน Go Go!!
[code lang="php"]
function getWebContent( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_USERAGENT => "spider",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$referer ="http://www.livescore.com";
$content =getWebContent($referer);
print "
";

print_r($content);

?>

[/code]
ค่าที่ content ของเว็บไซต์ที่รีเทิร์นกลับมาจะอยู่ในตัวแปร $content['content'] ฟังก์ชั่นนี้ถ้านำไปประยุกต์จะมีประโยชน์มากมายครับ
This e

0 comments:

Post a Comment

 
Design by I Love PHP