用PHP讀取RSS feed的代碼
更新時(shí)間:2008年08月01日 13:20:39 作者:
由于需要讀取不同來(lái)源的rss feed,寫了一個(gè)php程序來(lái)循環(huán)讀取rss feed,為了方便閱讀及了解程序?qū)崿F(xiàn)過(guò)程,加上了注釋,和大家共同學(xué)習(xí)。
而助易網(wǎng)的rss讀取就是在這個(gè)程序的基礎(chǔ)上稍做改造而成,主
要是輸出了一個(gè)數(shù)組字符串以及解決編碼問(wèn)題。
php源代碼及代碼詳細(xì)解釋如下:
<?php
//RSS源地址列表數(shù)組
$rssfeed = array("http://m.fzitv.net/feed",
"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");
//設(shè)置編碼為UTF-8
header('Content-Type:text/html;charset= UTF-8');
for($i=0;$i<sizeof($rssfeed);$i++){//分解開(kāi)始
$buff = "";
$rss_str="";
//打開(kāi)rss地址,并讀取,讀取失敗則中止
$fp = fopen($rssfeed[$i],"r") or die("can not open $rssfeed");
while ( !feof($fp) ) {
$buff .= fgets($fp,4096);
}
//關(guān)閉文件打開(kāi)
fclose($fp);
//建立一個(gè) XML 解析器
$parser = xml_parser_create();
//xml_parser_set_option -- 為指定 XML 解析進(jìn)行選項(xiàng)設(shè)置
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
//xml_parse_into_struct -- 將 XML 數(shù)據(jù)解析到數(shù)組$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"];
//標(biāo)簽統(tǒng)一轉(zhuǎn)為小寫
$tag = strtolower($tag);
if ($tag == "item" && $type == "open"){
$is_item = 1;
}else if ($tag == "item" && $type == "close") {
//構(gòu)造輸出字符串
$rss_str .= "<a href='".$link."' target=_blank>".$title."</a><br />";
$is_item = 0;
}
//僅讀取item標(biāo)簽中的內(nèi)容
if($is_item==1){
if ($tag == "title") {$title = $value;}
if ($tag == "link") {$link = $value;}
}
}
//輸出結(jié)果
echo $rss_str."<br />";
}
?>
要是輸出了一個(gè)數(shù)組字符串以及解決編碼問(wèn)題。
php源代碼及代碼詳細(xì)解釋如下:
<?php
//RSS源地址列表數(shù)組
$rssfeed = array("http://m.fzitv.net/feed",
"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");
//設(shè)置編碼為UTF-8
header('Content-Type:text/html;charset= UTF-8');
for($i=0;$i<sizeof($rssfeed);$i++){//分解開(kāi)始
$buff = "";
$rss_str="";
//打開(kāi)rss地址,并讀取,讀取失敗則中止
$fp = fopen($rssfeed[$i],"r") or die("can not open $rssfeed");
while ( !feof($fp) ) {
$buff .= fgets($fp,4096);
}
//關(guān)閉文件打開(kāi)
fclose($fp);
//建立一個(gè) XML 解析器
$parser = xml_parser_create();
//xml_parser_set_option -- 為指定 XML 解析進(jìn)行選項(xiàng)設(shè)置
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
//xml_parse_into_struct -- 將 XML 數(shù)據(jù)解析到數(shù)組$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"];
//標(biāo)簽統(tǒng)一轉(zhuǎn)為小寫
$tag = strtolower($tag);
if ($tag == "item" && $type == "open"){
$is_item = 1;
}else if ($tag == "item" && $type == "close") {
//構(gòu)造輸出字符串
$rss_str .= "<a href='".$link."' target=_blank>".$title."</a><br />";
$is_item = 0;
}
//僅讀取item標(biāo)簽中的內(nèi)容
if($is_item==1){
if ($tag == "title") {$title = $value;}
if ($tag == "link") {$link = $value;}
}
}
//輸出結(jié)果
echo $rss_str."<br />";
}
?>
您可能感興趣的文章:
- php XMLWriter類的簡(jiǎn)單示例代碼(RSS輸出)
- php生成RSS訂閱的方法
- PHP 正則表達(dá)式分析RSS
- PHP調(diào)用Twitter的RSS的實(shí)現(xiàn)代碼
- 利用PHP和AJAX創(chuàng)建RSS聚合器的代碼
- php實(shí)現(xiàn)的RSS生成類實(shí)例
- PHP生成RSS文件類實(shí)例
- php生成rss類用法實(shí)例
- php實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換為XML的方法
- PHP處理數(shù)組和XML之間的互相轉(zhuǎn)換
- php的SimpleXML方法讀寫XML接口文件實(shí)例解析
- php制作基于xml的RSS訂閱源功能示例
相關(guān)文章
微信公眾平臺(tái)開(kāi)發(fā)教程⑤ 微信掃碼支付模式介紹
這篇文章主要介紹了微信公眾平臺(tái)開(kāi)發(fā)微信掃碼支付模式,簡(jiǎn)單介紹了兩種常見(jiàn)的掃碼支付模式概念、原理及實(shí)現(xiàn)方法,需要的朋友可以參考下2019-04-04
laravel 實(shí)現(xiàn)向公共模板中傳值 (view composer)
今天小編就為大家分享一篇laravel 實(shí)現(xiàn)向公共模板中傳值 (view composer),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
PHP實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇PHP實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給的大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05
Thinkphp5框架使用validate實(shí)現(xiàn)驗(yàn)證功能的方法
這篇文章主要介紹了Thinkphp5框架使用validate實(shí)現(xiàn)驗(yàn)證功能的方法,結(jié)合實(shí)例形式分析了tp5內(nèi)置的對(duì)象validate實(shí)現(xiàn)驗(yàn)證的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
Thinkphp框架 表單自動(dòng)驗(yàn)證登錄注冊(cè) ajax自動(dòng)驗(yàn)證登錄注冊(cè)
這篇文章主要介紹了Thinkphp框架 表單自動(dòng)驗(yàn)證登錄注冊(cè) ajax自動(dòng)驗(yàn)證登錄注冊(cè)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
php設(shè)計(jì)模式之模板模式實(shí)例分析【星際爭(zhēng)霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之模板模式,基于星際爭(zhēng)霸游戲案例形式分析了php模板模式相關(guān)原理與使用技巧,需要的朋友可以參考下2020-03-03
ThinkPHP快速入門實(shí)例教程之?dāng)?shù)據(jù)分頁(yè)
這篇文章主要介紹了ThinkPHP快速入門實(shí)例教程的數(shù)據(jù)分頁(yè)實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下2014-07-07

