PHP解析RSS资源的练习
本文已被浏览244688次
本站用在友情链接上的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>
评论
您需要 先登录 才可以回复.