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

    2009.09.27

    WordPress反垃圾评论插件 wp imgcode

    当我的Wordpress博客开始受大家关注的…

  2. 没有图片

    2012.01.09

    将DedeCMS系统的data目录迁移到web以外目录

    Dedecms data目录是Dedecms…

  3. 没有图片

    2010.05.05

    网页设计可用的免费图案和纹理资源

    对于设计者来说,收藏一些图案和纹理资源非常有…

  4. 没有图片

    2010.12.12

    WordPress简洁主题 Type Easy 发布

    为了庆祝中国博客联盟成立一周年,联盟官方今天…

  5. 没有图片

    2010.09.27

    OneNote 2010 的功能和优点

    Microsoft OneNote 2010…

  6. 没有图片

    2009.10.07

    网站SEO关键词密度分析工具

    Image via Wikipedia 其实…

评论

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

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

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

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

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

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