<?php /* ปรับปรุง : 2552-05-09 rss.php ใช้อ่านแฟ้ม rss แล้วแปลงเป็น html เพื่อแสดงในเว็บเพจ - ทดสอบกับ RSS.XML เปิดให้ใช้จากเว็บไซต์ต่าง ๆ - โปรแกรมนี้ใช้กับบาง web server ไม่ได้ เพราะไม่อนุญาติให้ใช้ fopen - ยกเลิกการทดสอบใน thaiabc.com เพราะใช้ fopen ไม่ได้ (IIS on godaddy.com) - แก้ไขภาษาไทยแบบ UTF-8 ของแฟ้ม rss ใน gotoknow.org ทั้ง meta และ xml_parser_create ======================================= PHP RSS Reader v1.1 By Richard James Kendall Code updated from : http://www.rjk-hosting.co.uk/programs/prog.php?id=7 */ set_time_limit(0); // 0 for Unlimied but default for Maximum execution time is 30 seconds $far = array(); $i=0; $far[$i++] = "http://www.manager.co.th/RSS/Entertainment/Entertainment.xml"; $far[$i++] = "http://slashdot.org/index.rss"; $far[$i++] = "http://www.microsite.reuters.co.uk/rss/uk/topNews"; $far[$i++] = "http://www.neowin.net/backend.php?page=main"; $far[$i++] = "http://gotoknow.org/blog/thaiall/rss20.xml?tag=article"; $far[$i++] = "http://gotoknow.org/blog/thaiall/rss20.xml"; $far[$i++] = "http://www.rssthai.com/rss/education.xml"; $far[$i++] = "http://www.bangkokbiznews.com/rss/index.xml"; if(isset($_GET["url"])) $file=$_GET["url"]; else $file = $far[0]; if (substr($file,0,19) == "http://gotoknow.org") $charset = "UTF-8"; else $charset = "windows-874"; echo "<html><head><title>rss feeder</title> <meta http-equiv=content-type content='text/html; charset=". $charset ."'></head><body>"; if (isset($_GET["action"]) && $_GET["action"] == "source") { $ar = file("rss.php"); echo "<body bgcolor=#ffffdd><pre><font face='courier new'>"; foreach($ar as $v) echo str_replace("<","<",$v); exit; } // ------------------ echo "<form action='' method=get> <input name=url size=70 value='http://www.manager.co.th/RSS/Entertainment/Entertainment.xml'> <input type=submit></form>"; echo "<form action='' method=get><select name=url>"; foreach($far as $v) { echo "<option value=$v "; if (isset($_GET["url"]) && $_GET["url"] == $v) echo "selected"; echo ">$v"; } echo "<input type=submit></form>"; $rss_channel = array(); $currently_writing = ""; $main = ""; $item_counter = 0; function startElement($parser, $name, $attrs) { global $rss_channel, $currently_writing, $main; switch($name) { case "RSS": case "RDF:RDF": case "ITEMS": $currently_writing = ""; break; case "CHANNEL": $main = "CHANNEL"; break; case "IMAGE": $main = "IMAGE"; $rss_channel["IMAGE"] = array(); break; case "ITEM": $main = "ITEMS"; break; default: $currently_writing = $name; break; } } function endElement($parser, $name) { global $rss_channel, $currently_writing, $item_counter; $currently_writing = ""; if ($name == "ITEM") { $item_counter++; } } function characterData($parser, $data) { global $rss_channel, $currently_writing, $main, $item_counter, $file; if ($currently_writing != "") { switch($main) { case "CHANNEL": if (isset($rss_channel[$currently_writing])) { $rss_channel[$currently_writing] .= $data; } else { $rss_channel[$currently_writing] = $data; } break; case "IMAGE": if (isset($rss_channel[$main][$currently_writing])) { $rss_channel[$main][$currently_writing] .= $data; } else { $rss_channel[$main][$currently_writing] = $data; } break; case "ITEMS": if (isset($rss_channel[$main][$item_counter][$currently_writing])) { $rss_channel[$main][$item_counter][$currently_writing] .= $data; } else { $rss_channel[$main][$item_counter][$currently_writing] = $data; } break; } } } // old $xml_parser = xml_parser_create(); if ($charset == "UTF-8") $xml_parser = xml_parser_create("UTF-8"); else $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen("$file", "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); // output as HTML if (isset($rss_channel["ITEMS"])) { if (count($rss_channel["ITEMS"]) > 0) { for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) { $t = $rss_channel["ITEMS"][$i]["TITLE"]; $l = $rss_channel["ITEMS"][$i]["LINK"]; // htmlspecialchars(utf8_encode($string), ENT_QUOTES); print ("\n<table width=\"100%\" border=\"0\"><tr><td width=\"100%\">". "<font face='microsoft sans serif'><a href=\"". $l ."\" target=\"_blank\">". $t . "</a>"); print ("" . html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . ""); print ("</td></tr></table>"); } } else { print ("<b>There are no articles in this feed.</b>"); } } print ("<br><a href=?action=source>.</a></body></html>"); ?>