ตัวอย่างการดึง rss ด้วย php โดยใช้ curl

บันทึกการดึงข้อมูลจาก RSSโดยใช้ curl ในภาษา PHP เพื่อช่วยให้เว็บไซต์ของเราไม่ตกข่าว ก่อนอื่่นเรามารู้จักกับ RSS กันก่อนครับ

อาร์เอสเอส (RSS) คือหนึ่งในประเภทเว็บฟีด (Feeds) ซึ่งมีรูปแบบข้อมูลเอกซ์เอ็มแอล (XML) ที่ใช้กระจายข้อมูลที่มีการเพิ่มเติม หรือเปลี่ยนแปลงบ่อยจากเว็บไซต์ (web syndication) และบล็อก (Blog) ครับ

เอาล่ะครับ เมื่อรู้จักกับ RSS แล้วเราก็มาเข้าเรื่องของเรากันดีกว่าครับ บางคนอาจจะสงสัยว่า เอ..ทำไม่ผมไม่ใช้ฟังก์ชัน file_get_contents ของ PHP เลยล่ะ คำตอบก็คือ บางโฮสที่เพื่อนๆ ใช้อยู่นั้นอาจจะไม่เปิดการใช้งานของฟังก์ชันนี้ครับ เพราะถ้าไม่มีการป้องกันที่รัดกุมจริงๆ อาจจะถูกโจมตีได้ ซึ่งโฮสส่วนใหญ่จะเปิดให้ใช้้ curl อยู่แล้วครับ (อ้างจากโฮสที่ผมเคยใช้มานะครับ) แล้วเราจะรู้ได้ยังไงว่าโฮสของเราเปิดให้ใช้ curl วิธีตรวจสอบของผมคือ สร้างไฟล์ ที่เรียกใช้ัฟังก์ชัน phpinfo() แล้วก็ลองอัพขึ้นเว็บดูครับ เช่น

ผมจะสร้างเป็นไฟล์ชื่อ phpinfo.php แล้วก็ข้างในก็มี

<?php phpinfo(); ?>

เสร็จแล้วก็เข้าไปดูที่ http://www.mysite.com/phpinfo.php แล้วก็ค้นหาคำว่า curl ถ้าโฮสของเพื่่อนๆ เปิดให้ใช้ curl ก็จะเห็นดังรูปครับ

curl enable

พอเช็คองค์ประกอบเสร็จแล้วก็มาดูพระเอกของงานกันเลยครับ

$rss_url = 'http://www.imooh.com/feed'; //ตรงนี้จะเป็น url ของ RSS ที่ต้องการจะดึงนะครับ

$ch = curl_init($rss_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$contents = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXmlElement($contents);
for($i=0; $i<count($xml->channel->item); $i++){
$url = $xml->channel->item[$i]->link; //ตรงนี้เป็นการดึงเอาที่อยู่ของข่าวต้นฉบับครับ
$title = $xml->channel->item[$i]->title; // ส่วนตรงนี้จะเป็นหัวข้อข่าว
echo '<a href="'.$url.'">'.$title.'</a><br>';
}

เป็นอันว่าจบหลักสูตรครับ ในที่นี้จะเป็นการดึงมาแสดงเฉพาะหัวข้อข่าว แต่ถ้าเพื่อนๆ ต้องการคำอธิบายเพิ่มเติมด้วยก็สามารถทำได้ โดยการดึงเอาข้อมูลจากแท็ก description มาแสดงด้วย ดังนี้ครับ

$ch = curl_init('http://www.imooh.com/feed');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$contents = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXmlElement($contents);
for($i=0; $i<count($xml->channel->item); $i++){
$url = $xml->channel->item[$i]->link;
$title = $xml->channel->item[$i]->title;
$description = $xml->channel->item[$i]->description;
echo '<a href="'.$url.'">'.$title.'</a><br>'.$description.'<p>';
}

เท่านี้เพื่อนๆ ก็จะมีข่าวสารใหม่ๆ มาอัพเดทเว็บไซต์ของเพื่อนๆ ให้หมุนทันโลกแล้วครับ ^^