[置顶] RSS订阅之jplogic在线RSS阅读器

RSS简述

   RSS是在互联网上被广泛采用的内容包装和投递协议。网络用户可以在客户端借助于支持RSS的新闻工具软件,在不打开网站内容页面的情况下,阅读支持RSS输出的网站内容。内容提供者在其网站上发布相应的RSS文件,系统入口程序获取该RSS文件并把它提供给用户,用户使用相应的阅读工具软件来阅读该内容。这是比较官方的解释。下面我们从平时在一些门户网站,特别是博客系统中经常看到的一个比较常用的功能---RSS订阅。比如CSDN博客系统RSS订阅功能。

 我们都知道在WEB 2.0时代,博客等社交应用已取代了原有的日记等传统的记录个人日志方式,成为广大网友发布自己日记、文章、评论和最新生活动态等的主要场所。版主自然希望自己的发布的日记、文章、评论和最新生活动态能够被更多的朋友关注和收藏,同时也希望能够关注他人的发布的日记、文章、评论和最新生活动态。在RSS订阅出现以前,我们需要看别人的发布的日记、文章、评论和最新生活动态是否有更新,定会打开浏览器然后输入博客等地址来查看最新更新的博客。但在WEB 2.0时代之后,RSS订阅提供给我们更友好的方式。这个时候我们可以通过RSS的阅读软件(客户端软件),现在市面上提供很多RSS阅读客户端软件方便我们将我们需要关注的博客RSS超链接添加为RSS种子,现在RSS订阅功能已是绝大多数博客系统必备的功能了!这样既方面我们关注他人博客,也方面别人关注自己的博客。

下面我们看看我的CSDN博客的RSS文件格式,如下:

RSS格式

xml文本如下:

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" title="XSL Formatting" href="/rss.xsl" media="all" ?>
<rss version="2.0">
<channel>
    <title>jplogic  java 快速开发平台架构</title>
    <image>
    <link>http://blog.csdn.net</link>
    <url>http://static.blog.csdn.net/images/logo.gif</url>
    </image>
    <description>拿着互联网武器(互联网思维、互联网技术)之AK47,走在改变世界的路上!!!!</description>
	<link>http://blog.csdn.net/romantichjwhjwhjw</link>
	<language>zh-cn</language>
	<generator>http://blog.csdn.net</generator>
	<ttl>5</ttl>
	<copyright><![CDATA[Copyright &copy; romantichjwhjwhjw]]></copyright> 
	<pubDate>2015-1-15 12:00:32</pubDate>
    <item>
        <title><![CDATA[[转]各浏览器对 window.open() 的窗口特征 sFeatures 参数支持程度存在差异]]></title>
        <link>http://blog.csdn.net/romantichjwhjwhjw/article/details/41391055</link>
        <guid>http://blog.csdn.net/romantichjwhjwhjw/article/details/41391055</guid>
        <author>romantichjwhjwhjw</author>
        <pubDate>2014-11-22 22:42:10</pubDate>
        <description><![CDATA[
            
<p>本文原文来至地址:http://www.w3help.org/zh-cn/causes/BX1053</p>
<p><span style="color:rgb(0,51,102); font-family:微软雅黑,'Microsoft YaHei'; font-size:21px">   标准参考</span></p>
<p><span style="color:rgb(0,51,102); font-family:微软雅黑,'Microsoft YaHei'; font-size:21px">   .......</span></p>
<p><span style="color:rgb(0,51,102); font-family:微软雅黑,'Microsoft YaHei'; font-size:21px">   问题描述</span></p>
<p></p>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
使用 window.open 方法可以弹出一个新窗口,其中 open 方法的 sFeatures 参数选项在各浏览器中支持程度不一,这有可能导致同样的代码使各浏览器中弹出窗口形式产生巨大差异。</p>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
<span style="color:rgb(0,51,102); font-family:微软雅黑,'Microsoft YaHei'; font-size:21px">造成的影响</span></p>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
会造成不同浏览器中打开的窗口位置、尺寸出现差异;以及是否有地址栏、菜单栏、状态栏、滚动条和是否全屏等表现形式存在出入。</p>
<h2 id="impacted_browsers" style="margin:20px 20px 10px; padding:0px; font-family:微软雅黑,'Microsoft YaHei'; font-size:21px; font-weight:normal; color:rgb(0,51,102)">
受影响的浏览器</h2>

</tbody>
</table>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
上表中为各个浏览器对 features 各参数选项的支持程度,其中需要特殊说明的如下:</p>
<ul style="margin:10px 20px; padding:0px 0px 0px 20px; list-style:none; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px; line-height:21px">
<li style="margin:5px 0px; padding:0px; list-style:square">【标注1】:IE7 IE8 Firefox Chrome Safari 中,当 "menubar" 选项为 "yes" 时,默认不显示菜单栏,需要按 ALT 键后菜单栏才可显示;相反当 "menubar" 选项为 "no" 时,即使按了 ALT 键也不会显示菜单栏。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注2】:Safari 中,开启 "location" 选项与开启 "toolbar" 选项时显示效果一致。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注3】:IE6 IE8 Chrome 中,使用 "top" 和 "left" 定位,如果出现设定的的坐标值过大,弹出窗口将可能显示在屏幕可视范围外。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注4】:IE7 Firefox Safari Opera 中,使用 "top" 和 "left" 定位,如果出现设定的的坐标值过大,窗口会自动调整 "top" 与 "left" 值,确保窗口正常显示在屏幕可视区域内。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注5】:Chrome Opera 中,不支持在没有设定 "width" 与 "height" 值的情况下独立使用 "left" 和 "top",此时 "left" "top" 设定值均不生效。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注6】:Chrome 中,不支持在没有设定 "left" 和 "height" 值的情况下独立使用 "width" 与 "height",此时 "width" "height" 设定值均不生效。结合【标注5】说明可知,在 Chrome 中弹出窗口不论想要设定宽高或位置中的一个或几个值,都必须将他们全部赋值,否则都将不起作用。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注7】:Firefox Chrome 中,地址栏会始终显示。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注8】:Opera 中,地址栏默认不显示,但可以点击页面最上方横条使他显示出来,设置 "location=yes" 后地址栏会自动显示出来。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注9】:Chrome Opera 中,不论 "menubar" 值如何设置,永远不显示菜单栏。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注10】:Firefox Safari Chrome Opera 中,无论 "resizable"值如何设置,窗口永远可由用户调整大小。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注11】:Safari Chrome 中,在页面存在滚动条的情况下,无论 "scrollbars"值如何设置,滚动条始终可见。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注12】:IE7 在 Windows XP SP3 系统中默认可以支持 "status " 参数隐藏状态栏;而在 Windows Vista 系统默认环境下不支持 "status " 参数,状态栏始终可见。这与两个系统中默认的 IE7 小版本号不同有关,前者版本号较低,后者版本号较高。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注13】:Firefox 中,无论 "status" 值如何设置,状态栏始终可见,而 Chrome Opera 中,则与前者相反,状态栏始终不可见。</li><li style="margin:5px 0px; padding:0px; list-style:square">【标注14】: Chrome Opera 中,无论 "toolbar" 值如何设置,始终不显示工具栏。</li></ul>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
综上所述,可见 window.open 方法的 sFeatures 参数支持程度存在巨大差异,使用时须谨慎为之。</p>
<h2 id="solutions" style="margin:20px 20px 10px; padding:0px; font-family:微软雅黑,'Microsoft YaHei'; font-size:21px; font-weight:normal; color:rgb(0,51,102)">
解决方案</h2>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
建议在使用 window.open 方法的 sFeatures 参数时,推荐如下配置字符串,可确保所有浏览器表现基本一致:</p>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
<pre code_snippet_id="529050" snippet_file_name="blog_20141122_2_6980948"  name="code" class="html">" top=nInt,left=nInt,width=nInt,height=nInt,location=yes,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no "</pre><br>
<br>
</p>
<p style="margin:10px 20px; padding-top:0px; padding-bottom:0px; line-height:21px; font-family:Arial,Verdana,Tahoma,sans-serif; font-size:14px">
<br>
</p>
<br>

            <div>
                作者:romantichjwhjwhjw 发表于2014-11-22 22:42:10 <a href="http://blog.csdn.net/romantichjwhjwhjw/article/details/41391055">原文链接</a>
            </div>
            <div>
            阅读:75 评论:0 <a href="http://blog.csdn.net/romantichjwhjwhjw/article/details/41391055#comments" target="_blank">查看评论</a>
            </div>
        ]]>
        </description>
        <category></category>
    </item>
</channel>
</rss>
格式大致简化为如下格式说明:

<?xml version="1.0" encoding="utf-8" ?> 
<rss version="2.0"> 
<channel> 
  <title>某某博客</title>//channel的标题
  <description>与某某博客介绍</description>//channel的介绍
  <link>http://blog.csdn.net/romantichjwhjwhjw/article/details/42201851</link>//channel的url
  <item> 
  <title><!-- item标题--></title>
  <link><!-- item URL --></link>
  <description><!-- 简要描述 --></description>
  <!-- 可选的/可扩展的元素 -->
  </item> 
  <item>
  <!-- 可多个item,一个channel有多个item
--></item><channel></rss></span>
 
 
  网页以RSS的形式为其内容提供一个通过URL获得的摘要。RSS摘要文件包含文章项,每一个RSS文件包含一个频道(Channel)。每个频道必须至少具备以下元素:Title(标题)、Description(对频道的摘要)、Link(导航到目标链接)和Language(频道语言)。每个频道由若干个Item(项)组成,每个项包含了一个URL、一个标题和一个摘要。
RSS的工作原理
原理图如下:
[置顶] RSS订阅之jplogic在线RSS阅读器_第1张图片
RSS在线客户端读取实现

本文现在通过Rome的方式实现RSS读取,其中原理有点类似于网页内容抓取,也就是在第三方应用(在这里是我平台服务端的一段代码)模拟浏览器请求支持RSS订阅功能博客对应的RSS超链接,而从中获取RSS超链接对应的RSS文件内容,并解析之,进而显示出来,这样就可以模拟在线RSS阅读器相关功能。如下是其中一段关键代码:

public SyndFeed parseRssContent(String rssUrl) {
		SyndFeed syndFeed = null;
		try {
			//出现异常:Server redirected too many times
			//有些网站是这样的,他判断cookie里面是否有某个值,
			//如果没有就定向到另外一个页面去把COOKIE的值设置了,然后再跳转回来,
			//但是如果我们通过HttpURLConnection去的话,cookie里面一直都没有那个值,
			//所以他就一直在那里跳来跳去,所以我们就需要一个CookieManager,
			//在使用URLConnection之前设置它,只需要设置一次。
			System.setProperty("http.maxRedirects", "100");
			// First set the default cookie manager.
			CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
			URLConnection feedUrlConnection = new URL(rssUrl).openConnection();
			//由于服务器屏蔽java作为客户端访问rssUrl所以设置User-Agent
			feedUrlConnection.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) ");
			//读取Rss源
			XmlReader reader = new XmlReader(feedUrlConnection);
			SyndFeedInput input = new SyndFeedInput();
			//得到SyndFeed对象,即得到Rss源里的所有信息
			syndFeed = input.build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return syndFeed;
	}
在以上关键代码代码中有这么一段:
feedUrlConnection.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) ");
这便是模拟浏览器请求,除此之外还需要在
URLConnection feedUrlConnection = new URL(rssUrl).openConnection();
之前添加如下代码:

System.setProperty("http.maxRedirects", "100");
			// First set the default cookie manager.
			CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
否则对于一些博客应用会出现异常:Server redirected too many times。好了以上这一段代码完了之后其实就是通过Rome提供给我们的API把解析后的内容存放到相应的javabean即可。

   好了,以上便是关于在线RSS阅读器的实现方式,以上内容单元对你有所帮助。以下便是本人实现的一个添加了数据库支持的在线RSS阅读器,如下图:

[置顶] RSS订阅之jplogic在线RSS阅读器_第2张图片

在线设置收藏需要关注的博客链接,如下图:

[置顶] RSS订阅之jplogic在线RSS阅读器_第3张图片


你可能感兴趣的:(rss,阅读器,rss阅读器,社交应用)