บันทึกการดึงข้อมูลจาก 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>'; }
เท่านี้เพื่อนๆ ก็จะมีข่าวสารใหม่ๆ มาอัพเดทเว็บไซต์ของเพื่อนๆ ให้หมุนทันโลกแล้วครับ ^^