读取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.06.25

    Discuz!x2防CC攻击设置详细教程

    在config_global.php文件中有…

  2. 没有图片

    2014.01.12

    LNMP 卡在 starting PHP-FPM 解决办法

    今晚在阿里云使用LNMP一键安装包安装Ngi…

  3. 没有图片

    2011.04.06

    为你的日志添加分享到腾讯微博、新浪微博等按钮

    博客今天添加了分享到腾讯微博、新浪微博、开心…

  4. 没有图片

    2011.03.22

    推荐12款WordPress TwentyTen 衍生主题

    TwentyTen 主题是WordPress…

  5. 没有图片

    2010.05.12

    WordPress评论统计的一大Bug

    WordPress目前来看已经很完善了,但菠…

  6. 没有图片

    2009.07.08

    WordPress兄弟代码BBPress论坛发布

    BBPress论坛是Wordpress博客系…

评论

  1. Rusaer 2010.03.05 10:48下午

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

  2. JUST BB 2010.03.05 2:41下午

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

  3. 羽中 2010.03.05 1:07下午

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