读取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. 没有图片

    2012.05.20

    Centos 服务器时间同步

    新装的服务器可能设置了错误的,需要调整时区并…

  2. 没有图片

    2013.12.26

    联想Thinkpad E420/E440 快捷键如何切换设置

    用了E440已经有几天了,整体来说还将就着用…

  3. 没有图片

    2009.10.13

    绘画工具的使用-菠萝AE学习笔记

    实验项目13206304 绘画工具的使用 实…

  4. 没有图片

    2009.09.04

    Flickr Uploadr 在免费的相册空间Flickr 上分享你的照片软件

    在 Flickr.com 上上传 將你的相片…

  5. 没有图片

    2010.03.17

    三个可以托管上Twitter的源码:Twitese,Rabr,Dabr

    Twitter已经是墙外之特,我们只能望墙兴…

  6. 没有图片

    2010.04.28

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

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

评论

  1. 减肥药排行榜2010 2010.03.14 12:40上午

    看到代码就头疼,带回研究

  2. 普通话考试 2010.03.13 5:09下午

    搜藏之···做个记号,以备不时之需···

  3. 仁心博客 2010.03.09 10:58下午

    技术文章…………
    .-= 仁心博客的最新日志:天翼3G无线上网卡+4个月资费卡 =-.

  4. 漠岚 2010.03.09 1:37下午

    我稀饭php 我要学!!!

  5. 619 2010.03.09 11:59上午

    赶紧把我从垃圾堆里翻出来

  6. 619 2010.03.09 11:58上午

    赶紧把我从垃圾堆里翻出来

  7. Firm 2010.03.08 6:11下午

    看到代码就头疼,带回研究
    .-= Firm的最新日志:PaidToClick注册操作教程 =-.

  8. 博客海 2010.03.07 2:59下午

    你好啊!看到我博客上的很多链接里都有你的链接!
    希望我们也添加一个!谢谢!
    博客海
    http://bloghack.cn
    .-= 博客海的最新日志:100+网站目录免费收录你的网站博客 =-.

  9. 619 2010.03.06 11:56下午

    不会用
    .-= 619的最新日志:犀利哥:哥能回家,是因为哥有料儿! =-.

  10. Rusaer 2010.03.05 10:48下午

    可以做出rssfeed来啊。http://rusaer.com/wpg 这个页面用google代码调用的,不知道源代码是什么

  11. JUST BB 2010.03.05 2:41下午

    不错的代码
    .-= JUST BB的最新日志:首页 =-.

  12. 羽中 2010.03.05 1:07下午

    记得小邪那有写过个读一行的,效果好像和你这评论下那个差不多:)
    .-= 羽中的最新日志:《迷失》系列 – 颠覆到底 =-.

  13. 从前网 2010.03.04 6:01下午

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

  14. 小邪 2010.03.03 11:55下午

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

  15. 菠萝 2010.03.03 11:44下午

    @QiQBoY
    欢迎收藏,哈哈。

    @Jclyn
    有好看的吧?

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

  16. 星网 2010.03.03 2:46下午

    囧了,你是主机是哪里的呀? 打开的好慢哦!
    .-= 星网的最新日志:我爱武冈,武冈是我家(二) =-.

  17. Jclyn 2010.03.03 1:46下午

    前排强势围观
    .-= Jclyn的最新日志:图片&文字 =-.

  18. QiQBoY 2010.03.03 1:08下午

    收藏之。。。