วันอังคารที่ 17 กรกฎาคม พ.ศ. 2550

อ่าน RSS ด้วย PHP แบบง่ายๆ สุด

อ่าน RSS ด้วย PHP แบบง่ายๆ สุด



RSS หรือพวก News Feed เนี่ย จะมี Pattern เป็นโครงสร้างแบบ XML ที่กําหนดเอาไว้แล้ว ซึ่งถ้าเราเขียน PHP หรือ JavaScript ได้ก็สามารถที่จะดึงมันเข้ามาอ่านแล



RSS หรือพวก News Feed เนี่ย จะมี Pattern เป็นโครงสร้างแบบ XML ที่กําหนดเอาไว้แล้ว ซึ่งถ้าเราเขียน PHP หรือ JavaScript ได้ก็สามารถที่จะดึงมันเข้ามาอ่านและถอดแท็ก XML ออกมาได้


เรา คงไม่ต้องพูดถึงเรื่องของรูปแบบ RSS กัน แต่เราจะมาดูกันว่า การใช้ PHP ถอดแท็ก XML นั้น เราจะเรียกฟังก์ชั่นของ PHP ตัวหนึ่งที่ชื่อ xml_parse ดังตัวอย่าง


$fp=fopen("http://www.xyz.com/rss.xml","r");


while($data=fread($fp,4096))


{


xml_parse( $p, $data, feof($fp));


}


จากตัวอย่าง นี่ไงครับ เป็นการอ่านค่าเข้ามาจากเว็บ xyz.com/rss.xml คราวนี้ เมื่อเราอ่านเข้ามาด้วย PHP ได้แล้ว เราก็จะต้องถอดแท็ก โดยกําหนดฟังก์ชั่นที่ใช้ตอบรับเมื่อเจอแท็กต่างๆ เมื่อถอดมาแล้วเราก็จะเอามันเก็บไว้ในอาเรย์ ตรงนี้ก็เหมือนกับการเอาข้อมูล RSS ที่อ่านเข้ามา มาเก็บไว้ใน memory ชั่วคราว จากนั้นก็แสดงมันออกมาทีเดียวเลย ดังนี้


<?


$arr=array();


$count=0;


$block= "ITEM";


$key="";


$value="";


function startxml( $parser , $name, $att)


{


global $key;


$key=$name;


}


function endxml( $parser, $name )


{


global $count;


global $block;


if ($name==$block)


{


$count=$count+1;


}


}


function cdata( $parser, $data )


{


global $key;


global $value;


global $count;


global $arr;


if (strlen($data) >1)


{


$value=$data;


$arr[$count][ "$key"]=$value;


}


}


$p=xml_parser_create();


xml_set_element_handler( $p , "startxml" , "endxml");


xml_set_character_data_handler($p, "cdata" );


$fp=fopen( "http://www.xyz.com/com_rss.xml","r");


while($data=fread($fp,4096))


{


xml_parse( $p, $data, feof($fp));


}


print("<font size=2></b>");


for ($i=1;$i<5;$i++)


{


echo "<img src=arrow.gif> <a href=", $arr[$i]["LINK"],">";


echo $arr[$i][ "TITLE"];


echo "</a>";


echo "<br>";


}

?>


เอาล่ะครับ เพื่อให้เข้าใจมากขึ้น ให้ท่านลองรันโปรแกรมต่อไปนี้ดูนะครับ


Manager.php


<?


$arr=array();


$count=0;


$block= "ITEM";


$key="";


$value="";


function startxml( $parser , $name, $att)


{


global $key;


$key=$name;


}


function endxml( $parser, $name )


{


global $count;


global $block;


if ($name==$block)


{


$count=$count+1;


}


}


function cdata( $parser, $data )


{


global $key;


global $value;


global $count;


global $arr;


if (strlen($data) >1)


{


$value=$data;


$arr[$count][ "$key"]=$value;


}


}


function openxml( $url )


{


$p=xml_parser_create();


xml_set_element_handler( $p , "startxml" , "endxml");


xml_set_character_data_handler($p, "cdata" );


$fp=fopen( $url , "r");


while($data=fread($fp,4096))


{


xml_parse( $p, $data, feof($fp));


}


xml_parser_free($p);


}


?>


<h3>Travel<h3>

<?


openxml( "http://www.manager.co.th/RSS/Around/Around.xml" );


print( "<font size=2></b>");


for ($i=1;$i <$count ;$i++)


{


echo "<a target=_blank href=", $arr[$i]["LINK"],">";


echo $arr[$i][ "TITLE"];


echo "</a>";


echo "<br><br>";


}


?>


ผลการรันจะเป็นดังรูปในข้างต้น