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

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

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

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

<?php phpinfo(); ?>

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

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

$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>';
}

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