PHP解析RSS资源的练习
本文已被浏览245416次
本站用在友情链接上的rss资源解析页面.突然发现这样能保留一部分的流量点击(并不是不希望给友站PV),而且还能够满足访客查看友站的需求,现在公开来这部分代码.

这部分是用的FancyBox的ajax模式加载一个页面,这个页面就是RSS解析结果.为了保持样式的和谐,所以直接用的本站style.css中的规则.
首先了解一下RSS这个神奇的东西:
所以说白了就是一个针对XML的解析练习咯.
先来研究下RSS的XML结构
<rss version="2.0">
<channel>
<title>网站标题</title>
<link>网站首页地址</link>
<description>描述</description>
<copyright>授权信息</copyright>
<language>使用的语言(zh-cn表示简体中文)</language>
<pubDate>发布的时间</pubDate>
<lastBuildDate>最后更新的时间</lastBuildDate>
<generator>生成器</generator>
<item>
<title>标题</title>
<link>链接地址</link>
<description>内容简要描述</description>
<pubDate>发布时间</pubDate>
<category>所属目录</category>
<author>作者</author>
</item>
</channel>
</rss>
跟据这个结构,我们就可以通过->连接符来依次获取对应的节点数据,然后再拼成一个html页面返回给浏览器即可,然后根据这一思想,得到下面的代码:
<?php
$rss=file_get_contents(str_replace(""","",$_GET['RSSourse']));
$rss=simplexml_load_string($rss);
if(!$rss) {
?>
<div class="rss-head">
<h1>RSS解析失败</h1>
<span style="font-size: 16px;font-style: italic;"><?php echo $_GET['RSSourse'];?></span>
<ul>
<li>此网站RSS资源可能存在错误无法解析</li>
<li>此网站RSS资源可能已经关闭</li>
<li>此网站可能禁止PHP获取此内容</li>
<li>可能由于来自本站的访问过多导致暂时访问限制Orz</li>
<li>建议您直接访问此RSS源:<a href="<?php echo $_GET['RSSourse'];?>" target="_blank"><i class="fa fa-rss"></i><?php echo $_GET['RSSourse'];?></a></li>
</ul>
</div>
<?php
exit;
};
function rss_sort_date($str){
$time=strtotime($str);
return date("Y年m月d日 H时i分",$time);
}
?>
<div>
<div class="rss-head">
<div>
<h1><a href="<?php echo $rss->channel->link;?>" target="_blank"><?php echo $rss->channel->title;?></a></h1>
<span style="font-size: 16px;font-style: italic;"><?php echo $rss->channel->link;?></span>
<p><?php echo $rss->channel->description;?></p>
<ul>
<li>
RSS源地址:<a href="<?php echo $_GET['RSSourse'];?>" target="_blank"><i class="fa fa-rss"></i><?php echo $_GET['RSSourse'];?></a>
</li>
<?php
if(isset($rss->channel->copyright)&&$rss->channel->copyright!=""){
echo "<li> 版权信息:".$rss->channel->copyright."</li>";
}
if(isset($rss->channel->language)&&$rss->channel->language!=""){
echo "<li> 语言:".$rss->channel->language."</li>";
}
if(isset($rss->channel->pubDate)&&$rss->channel->pubDate!=""){
echo "<li> 发布时间:".$rss->channel->pubDate."</li>";
}
if(isset($rss->channel->lastBuildDate)&&$rss->channel->lastBuildDate!=""){
echo "<li> 最后更新:".rss_sort_date($rss->channel->lastBuildDate)."</li>";
}
if(isset($rss->channel->generator)&&$rss->channel->generator!=""){
echo "<li> 源生成器:".$rss->channel->generator."</li>";
}
?>
</ul>
</div>
<div id="rss-qrcode" style="position:absolute;right:10px;top:10px">
<script>
jQuery('#rss-qrcode').qrcode({
width: jQuery(".rss-head").height(),
height: jQuery(".rss-head").height(),
render: "canvas", //设置渲染方式 table canvas
text: utf16to8("<?php echo get_short_url($rss->channel->link); ?>"),
background: "#f4f4f4", //背景颜色
foreground: "#000000" //前景颜色
});
</script>
</div>
</div>
<div class="article-list" style="padding:10px">
<?php foreach($rss->channel->item as $item){?>
<article class="article">
<h1><a href="<?php echo $item->link;?>" target="_blank"><?php echo $item->title;?></a></h1>
<div class="content">
<p>
<?php echo $item->description;?>
</p>
</div>
<div class="article-info">
<i class="fa fa-calendar" style="margin:0px 5px"></i><?php echo rss_sort_date($item->pubDate);?>
<i class="fa fa-map-marker" style="margin:0px 5px"></i>
<?php
for($i=0;$i<count($item->category);$i++){
echo $item->category[$i];
if($i+1!=count($item->category)){
echo ",";
}
};
if(isset($item->author)&&$item->author!=""){
?>
<i class="fa fa-user" style="margin:0px 5px"></i>
<?php
echo $item->author;
}
?>
</div>
<div class="readmore">
<a href="<?php echo $item->link?>" target="_blank">查看此文章</a>
</div>
</article>
<?php }?>
</div>
<div style="position:absolute;right:0px;margin-right:10px;">
免责声明:本站只提供RSS解析,解析内容与本站无关,版权归来源网站所有
</div>
</div>
评论
您需要 先登录 才可以回复.