登录

在这个站点登录

保存我的登录记录

<<忘记密码?

还没有账号?点此注册>>

Jerry

PHP解析RSS资源的练习

分享到:

本文已被浏览244367

本站用在友情链接上的rss资源解析页面.突然发现这样能保留一部分的流量点击(并不是不希望给友站PV),而且还能够满足访客查看友站的需求,现在公开来这部分代码.
RSS解析页面
这部分是用的FancyBox的ajax模式加载一个页面,这个页面就是RSS解析结果.为了保持样式的和谐,所以直接用的本站style.css中的规则.

首先了解一下RSS这个神奇的东西:

RSS
简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。[1] RSS可以是以下三个解释的其中一个: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。

所以说白了就是一个针对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>
 手机扫描左边的二维码,立刻将文章收入手机!
 微信扫描左边二维码,点击右上角即可分享到朋友圈!
严禁任何非授权的采集与转载,转载须经站长同意并在文章显著位置标注本文连接,站长保留追究法律责任的权利.

评论

 您需要 先登录 才可以回复.