读取RSS Feed PHP代码

为了实现网站页面里读取RSS Feed内容并显示,从网上找了两个不错的代码,进行详细研究,也给有同样需要的朋友一个借鉴。

下页这个是引自肥肥龙的:

<?php
//RSS源地址列表数组
$rssfeed = array(“http://www.blog-dragon.com/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”); //设置编码为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 />”;
}
?>

下面这个是来自CSDN的代码:

[前言]
在个人建站的过程中,经常要从其他网站获取大量动态信息。
本文所描述的就是使用php程序读取rss标准的xml格式文件,动态显示他人站点的信息列表。

[前提]
对于php编程爱好者来说,前期的准备相对简单,只要有php4以上的环境就可以建立此功能。

[对应的XML/RSS文件的格式]
基本上很多网站提供的用来做rss浏览的文件都是以下的格式,这是符合xml的w3c通用标准的。
简单的分析一下,
基本的树结构是,
一个rss根下,有一个channel节点,
该channel节点下的title,link,description属性是常用的,
然后就是item节点,众多item节点是最近跟新的若干篇文章,
该item节点下的title,link,pubDate,description属性是常用的。
简单格式如下:

<rss version=”2.0″ xmlns:dc=”http://purl.org/dc/elements/1.1/” xmlns:trackback=”http://madskills.com/public/xml/rss/module/trackback/” xmlns:wfw=”http://wellformedweb.org/CommentAPI/” xmlns:slash=”http://purl.org/rss/1.0/modules/slash/”>
<channel>
<title>本站点频道的标题</title>
<link>链接地址</link>
<description>站点频道描述信息</description>
<item>
<title>文章1</title>
<link>文章1链接地址</link>
<description>文章1内容简介</description>
</item>
<item>
<title>文章2</title>
<link>文章2链接地址</link>
<description>文章2内容简介</description>
</item>
</channel>
</rss>

举例:

– <rss version=”2.0″ xmlns:dc=”http://purl.org/dc/elements/1.1/” xmlns:trackback=”http://madskills.com/public/xml/rss/module/trackback/” xmlns:wfw=”http://wellformedweb.org/CommentAPI/” xmlns:slash=”http://purl.org/rss/1.0/modules/slash/”>
– <channel>
<title>邢晓宁专栏</title>
<link>http://blog.csdn.net/thefirstwind/</link>
<description>代码一生</description>
<dc:language>af</dc:language>
<generator>.Text Version 1.0.1.1</generator>
<image>http://counter.csdn.net/pv.aspx?id=72</image>
– <item>
<dc:creator>♂猜猜♂(邢晓宁)</dc:creator>
<title>在 MS Windows 下建立 DocBook 的解譯環境</title>
<link>http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx</link>
<pubDate>Thu, 21 Dec 2006 13:50:00 GMT</pubDate>
<guid>http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx</guid>
<wfw:comment>http://blog.csdn.net/thefirstwind/comments/1451714.aspx</wfw:comment>
<comments>http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx#Feedback</comments>
<slash:comments>0</slash:comments>
<wfw:commentRss>http://blog.csdn.net/thefirstwind/comments/commentRss/1451714.aspx</wfw:commentRss>
<trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1451714</trackback:ping>
<description>在 MS Windows 下建立 DocBook 的解譯環境<img src =”http://blog.csdn.net/thefirstwind/aggbug/1451714.aspx” width = “1” height = “1” /></description>
</item>
– <item>
<dc:creator>邢晓宁</dc:creator>
<title>程序员学习的革命-如何使用大脑</title>
<link>http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx</link>
<pubDate>Wed, 13 Dec 2006 09:41:00 GMT</pubDate>
<guid>http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx</guid>
<wfw:comment>http://blog.csdn.net/thefirstwind/comments/1440965.aspx</wfw:comment>
<comments>http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx#Feedback</comments>
<slash:comments>27</slash:comments>
<wfw:commentRss>http://blog.csdn.net/thefirstwind/comments/commentRss/1440965.aspx</wfw:commentRss>
<trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1440965</trackback:ping>
<description>很多人搞技术,还有很多转行搞技术,搞了一段时间终于发现,自己不适合作技术,要我说其实就是用脑方式的问题。真的学会适当的用脑方式,编程编起来得心应手。<img src =”http://blog.csdn.net/thefirstwind/aggbug/1440965.aspx” width = “1” height = “1” /></description>
</item>
</channel>
</rss>

[核心程序]

<?php

$RSSURL = “http://blog.csdn.net/thefirstwind/Rss.aspx”;
$buff = “”;
$fp = fopen($RSSURL,”r”);
while ( !feof($fp) ) {
$buff .= fgets($fp,4096);
}
fclose($fp);

$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$buff,$values,$idx);
xml_parser_free($parser);

$in_item = 0;
foreach ($values as $value) {
$tag = $value[“tag”];
$type = $value[“type”];
$value = $value[“value”];

$tag = strtolower($tag);
if ($tag == “item” && $type == “open”) {
$in_item = 1;
} else if ($tag == “item” && $type == “close”) {
echo <<<EOM
$title
$link
$description
EOM;
$in_item = 0;
}
if ($in_item) {
switch ($tag) {
case “title”:
$title = $value;
break;
case “link”:
$link = $value;
break;
case “description”:
$description = $value;
break;
}
}
}

?>

[配合上以上说明,完整的源代码如下]

<?php

#$RSSURL = “http://www3.asahi.com/rss/index.rdf”;
#$RSSURL = “http://rss.news.yahoo.com/rss/topstories”;
$RSSURL = “http://blog.csdn.net/thefirstwind/Rss.aspx”;
#$RSSURL = “http://jlinux.ddo.jp/bbs/rss.php?auth=0”;
#$RSSURL = “http://rss.sina.com.cn/news/marquee/ddt.xml”;
#$RSSURL = “http://rss.sina.com.cn/news/allnews/sports.xml”;
#$RSSURL = “http://rss.sina.com.cn/news/allnews/ent.xml”;

$buff = “”;
$fp = fopen($RSSURL,”r”);
while ( !feof($fp) ) {
$buff .= fgets($fp,4096);
}
fclose($fp);

$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$buff,$values,$idx);
xml_parser_free($parser);
$channel_title = $values[2][“value”];
echo <<<__HTML__
<html>
<head>
<meta http-equiv=’content-type’ content=’text/html; charset=UTF-8′>
<title>$channel_title</title>
<link rel=’stylesheet’ type=’text/css’ id=’css’ href=’/bbs/forumdata/cache/style_1.css’>
<script type=’text/javascript’ src=’/bbs/include/common.js’></script>
<script type=’text/javascript’ src=’/bbs/include/menu.js’></script>
</head>
<body>

<table border=’1′>
<tr><td>
<img src=’http://www.csdn.net/Images/logo_csdn.gif’>&nbsp;&nbsp;
<!–
<img src=’http://us.i1.yimg.com/us.yimg.com/i/us/nt/ma/ma_nws_1.gif’>&nbsp;&nbsp;
<img src=’http://jlinux.ddo.jp/bbs/images/default/logo.gif’>&nbsp;&nbsp;
<img src=’http://image2.sina.com.cn/dy/sina_news626.gif’>&nbsp;&nbsp;
//–>
</td>
<td>
$channel_title
$channel_lastBuildDate<br>
</td>
</td>
__HTML__;

$in_item = 0;
foreach ($values as $value) {
$tag = $value[“tag”];
$type = $value[“type”];
$value = $value[“value”];

$tag = strtolower($tag);
if ($tag == “item” && $type == “open”) {
$in_item = 1;
} else if ($tag == “item” && $type == “close”) {
echo <<<EOM
<tr>
<td colspan=’2′ class=’header’width=’400′>
<a href=”$link”>$title</a>
</td>
</tr>
<tr>
<td colspan=’2′ width=’400’align=’right’>
$pubDate
</td>
</tr>
<tr>
<td colspan=’2′ width=’400′>
$description
</td>
</tr>
<tr>
<td>
&nbsp;
</td>
</tr>
EOM;
$in_item = 0;
}
if ($in_item) {
switch ($tag) {
case “title”:
$title = $value;
break;
case “link”:
$link = $value;
break;
case “pubDate”:
$pubDate = $value;
break;
case “description”:
$description = $value;
break;
}
}
}

echo <<< __HTMLEND__
</table>
</body>
</html>
__HTMLEND__;

?>

rss-feed

rss-feed

思章老师

认准了方向,就要勇敢地走下去,十年磨一剑,我相信,只要坚持,一切都有可能。

相关日志

  1. 2013.10.25

    WordPress 3.7 Basie 正式版发布

    今天WordPress 3.7 正式版发布了…

  2. 没有图片

    2010.12.23

    Twitter is over capacity.推特也疯狂了

    给写文章前,给大家分享个好东西链接,是什么东…

  3. 没有图片

    2009.09.03

    30个基于Flash建立的摄影图片站

    你喜欢商业摄影吗?如果你喜欢,那么这篇日志正…

  4. 没有图片

    2009.07.20

    KingCMS 2009 正式版发布

    KingCMS的口号是:情系开源,共拓网络!…

  5. 2012.05.14

    [主题推荐]WordPress CMS主题:Hcms1.2

    菠萝一般发布的主题都是自己写或优化的一些主题…

  6. 没有图片

    2010.04.28

    菠萝筐加入博客联盟周博客排行,大家帮来投一票吧!

    中国博客联盟第一轮周优秀博客排行拉开帷幕了,…

评论

  1. 从前网 2010.03.04 6:01下午

    菠萝,你的博客好乱啊~都是代码
    .-= 从前网的最新日志:美国Topeka市更名为Google市 =-.

  2. 小邪 2010.03.03 11:55下午

    加油菠萝,小邪觉得XML 解析器的文档是最让人头疼的东西鸟 ~。。。

  3. 菠萝 2010.03.03 11:44下午

    @QiQBoY
    欢迎收藏,哈哈。

    @Jclyn
    有好看的吧?

    @星网
    我的是美国主机,有时会很慢。再一个,我加载的插件也多。