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

    2010.09.27

    PowerPoint 2010 的功能和优点

    使用 Microsoft PowerPoin…

  3. 没有图片

    2013.04.23

    CentOS 6.4 系统各个目录的作用详解

    文章转载自网络,留作自己没事参考之用,估计对…

  4. 没有图片

    2012.12.19

    WordPress循环调用分类及分类下文章标题

    WordPress各种调用都已经很熟悉了,但…

  5. 没有图片

    2009.07.12

    2008年度五十个国外最漂亮网站推荐

    08年的网页设计开始流行一些破旧的质感和一些…

  6. 没有图片

    2013.11.23

    WordPress 3.8 Beta1 发布

    WordPress官方近来的更新太给力了,今…

评论

  1. 漠岚 2010.03.09 1:37下午

    我稀饭php 我要学!!!

  2. 619 2010.03.09 11:59上午

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

  3. 619 2010.03.09 11:58上午

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