因為網站需要讀取不同來源的rss feed,寫了一個PHP程序來循環讀取rss feed,為了方便閱讀及了解程序實現過程,加上了注釋,和大家共同學習。而助易網的rss讀取就是在這個程序的基礎上稍做改造而成,主要是輸出了一個數組字符串以及解決編碼問題。
PHP源代碼及代碼詳細解釋如下:
- <?PHP
- //RSS源地址列表數組
- $rssfeed = array("http://www.jzxue.com/rss/12.XML",
- "http://rss.sina.com.cn/news/allnews/sports.XML",
- "http://ent.163.com/special/00031K7Q/rss_toutiao.XML",
- "http://tech.163.com/special/00091JPQ/techimportant.XML");
- //設置編碼為UTF-8
- header('Content-Type:text/Html;charset= UTF-8');
- for($i=0;$i<sizeof($rssfeed);$i++){//分解開始
- $buff = "";
- $rss_str="";
- //打開rss地址,並讀取,讀取失敗則中止
- $fp = fopen($rssfeed[$i],"r") or dIE("can not open $rssfeed");
- while ( !feof($fp) ) {
- $buff .= fgets($fp,4096);
- }
- //關閉文件打開
- fclose($fp);
- //建立一個 XML 解析器
- $parser = XML_parser_create();
- //xml_parser_set_option -- 為指定 XML 解析進行選項設置
- XML_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
- //xml_parse_into_struct -- 將 XML 數據解析到數組$values中
- XML_parse_into_struct($parser,$buff,$values,$idx);
- //xml_parser_free -- 釋放指定的 XML 解析器
- XML_parser_free($parser);
- foreach ($values as $val) {
- $tag = $val["tag"];
- $type = $val["type"];
- $value = $val["value"];
- //標簽統一轉為小寫
- $tag = strtolower($tag);
- if ($tag == "item" && $type == "open"){
- $is_item = 1;
- }else if ($tag == "item" && $type == "close") {
- //構造輸出字符串
- $rss_str .= "<a href='".$link."' target=_blank>".$title."</a><br />";
- $is_item = 0;
- }
- //僅讀取item標簽中的內容
- if($is_item==1){
- if ($tag == "title") {$title = $value;}
- if ($tag == "link") {$link = $value;}
- }
- }
- //輸出結果
- echo $rss_str."<br />";
- }
- ?>