Java开源RSS组件包(Java Open Source RSS Lib Packages)
* RSSLibJ
RSSLibJ是一个专门读取和生成RSS的小巧实用的Java库,大小仅25k。
* RSSLib4J
RSSLib4J 是一套用于从RSS Feed解析和检索信息的Java API。它支持RSS version0.9x ,1.0和2.0规范,Doublin内核和Syndication名字空间。
* BlogBridge
BlogBridge是一个RSS阅读器/合成器,专为阅读和处理大量RSS feed的人而提供。这些典型的有Weblogs, 但也有其它类型的RSS feed。
* Flock
Flock是一种RSS/RDF用Java编写的信息集成器。它是一种server-side应用程序,带有一个浏览器。
* RSSOwl
RSSOwl 是一个完全用 Java 的SWT快速图形库开发的 RSS / RDF / Atom 新闻阅读器。按类别读取新闻,分类存储收藏信息,导出为 PDF / RTF / HTML / OPML,从 OPML格式导入,支持全文本搜索,使用Internet浏览器。
* Informa
Informa提供一个基于Java的RSS类库.它支持导出,导入,存储,搜索等。
* Jena
Jena 是一个由HP实验室开发的表示和处理半结构化数据(主要是基于RDF的管理、查询等)的Java开源项目。目前是Jena2版本,Jena1做到了支持 RDF的数据表达、解析、查询(采用RDQL)和简单的推理,Jena2的目标在支持本体(包括DAML、RDFS和OWL的应用程序接口API)。
* RSS Reader
RSS Reader提供了一个Java API和一个图形客户端来分析与显示RSS格式的内容。
* Schema
Schema是一个利用RDF与RDF Schema进行存储,查询,讨论(reasoning )的Java开源框架.Sesame既可以当作RDF与 RDF Schema的数据库或当作一个Java 库用来为应用程序提供RDF的功能.
* RSS Notifier
RSS Notifier是一个RSS Feed阅读器,它设计成一个Window托盘程序随Windows的启动一起加载.它用基于使用RSS文件的新闻订阅方式来阅读即时新闻.
* Sesame
inferencing是一个用于存储,查询,解析RDF的Java框架.它可被配置作为一个web服务器或当一个Java包来使用.它的特点包括3种查询语言(SeRQL, RQL, RDQL),支持内存(RAM),磁盘(disk),与RDBMS存储.
* FaceRSS
FaceRSS是一个简单的JSF组件,它可以从指定的RSS url读取新闻并展示出来。 FaceRSS基于rsslib4j这个开源包进行构建所以它支持RSS 0.9x,1.0,和2.0。
* ROME
ROME是一组Atom/RSS工具类它使得用Java来操作大部份syndication格式变得更加容易:
# RSS 0.90
# RSS 0.91 Netscape
# RSS 0.91 Userland
# RSS 0.92
# RSS 0.93
# RSS 0.94
# RSS 1.0
# RSS 2.0
# Atom 0.3
# Atom 1.0
ROME不仅包括各种syndication feeds的解析器与生成器,而且还包括能够把一种格式转换成另外一种格式的转换器。
* HORRORss
HORRORss是一个简单的RSS(RSS0.9x,RSS.0,RSS2.0)解析包。它支持Atom feeds,但并没有完全符合Atom规范。只能支持一些基本的feed元素:title,link,author,和description。
上面我们看到了一份 RSS Lib 列表,Java 的类库就是丰富,而且都是开源的。
这么多让我眼花缭乱,用哪个呢?再转贴一份评测吧,这篇评测来自:http://www.yangzhe.net/blog/index.php/20050915/21.html
我的目标是做一个简单的portlet,每次读取新浪的RSS站点显示最新的新闻条目。
花了一个下午,去sourceforge和google 上搜索 opensource 的 java rss lib,还真有不少(顺便提一下,sourceforget的搜索真的很烂)。简单过滤以后,觉得以下三个类库比较有搞头。Rome 、rssutils和rsslib4j。具体的评测如下:
一. Rome
Rome 是 java.net 上的一个开源项目,现在的版本是0.5。为什么叫Rome呢,按它的介绍上的说法,有个“条条大路通罗马”的意思,有些RSS的意味。Rome可能是 sun 公司从自己某个子项目中抽离出来的,package和类的命名就象j2sdk一样感觉规范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS类似的一种内容聚合的方式)。Rome 本身是提供API和功能实现,其下独立出一个 rome-fetcher 项目,专门用来读取RSS内容。正和我意啊。
参照 fetcher 上的范例,解析 RSS 相当简单,代码片断如下:
代码
FeedFetcher fetcher = new HttpURLFeedFetcher();
SyndFeed feed = fetcher.retrieveFeed(feedUrl);
System.out.println(feedUrl + ” has a title: ” + new String(feed.getTitle().getBytes(”iso8859-1″), “utf-8″) + ” and contains “ + feed.getEntries().size() + ” entries.”);
for (Iterator iter = feed.getEntries().iterator(); iter.hasNext(); ) {
SyndEntry entry = (SyndEntry) iter.next();
System.out.println(”" + entry.getTitle() + “[” + entry.getPublishedDate() + “]”);
}
为什么用 new String(feed.getTitle().getBytes(”iso8859-1″), “utf-8″) 进行转码,是因为Rome来解析 新浪新闻 RSS的时候试图从 URLConnection 的 header 中得到编码信息,否则总是用 iso8859-1。而新浪的RSS response header 中不包含编码信息,所以要做一番转码。另外还有就是 entry.getPubDate() 也将返回null,因为Rome 用多种pattern 去试图解析时间信息,新浪的时间格式还是符合RFC822的,但是Rome 使用SimpleDateFormat 来解析时间,它忘记了一点,就是 SimpleDateFormat的解析是关联于 Locale 的,所以由于我本地locale是China,SimpleDateFormat的parse方法解析不出英文的时间字符。以上代码前加 Locale.setDefault(Locale.Englisth) 可以搞定,但总觉得不爽。
如果也不想转码的话,Rome 还提供了一个 XmlReader 的类,通过分析 header 和 xml 内容推断 encoding,修改 HttpURLFeedFetcher 的源码 :
代码
// 改变 InputStreamReader , 换用 XmlReader
//InputStreamReader reader = new InputStreamReader(is, ResponseHandler.getCharacterEncoding(connection));
XmlReader reader = new XmlReader(connection);
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(reader);
那么中文不用转码也能正确显示了,不过修改源码后我再解析 百度新闻 RSS 的时候,底层的JDOM却会抱错说xml 格式不正确。也许Rome的开发者也遇到过这样的问题,所以才没有使用 XmlReader。
二. rssutils
它是一个工具包,sun 的 develope站点上有文章 RSS Utilities: A Tutorial 专门介绍用taglib 显示RSS内容,附带的可以下载这个工具包,但我从网上搜索不到它的出处,自然也无法看到它的源码。但从反编译的代码来看,也是sun公司内部高手所做,设计精巧,代码简练。实现一个handler,用sax的方式解析xml内容,handler内部用反射和javabean的机制构造RSS元素对象并赋值。代码片断如下:
代码
RssParser parser = new RssParserImpl();
Rss rss = parser.parse(new URL(url));
System.out.println(rss.getChannel().getTitle());
for (Iterator iter = rss.getChannel().getItems().iterator(); iter.hasNext();) {
Item item = (Item)iter.next();
System.out.println(”" + item.getTitle() + ” ” + item.getPubDate());
}
如上所示,代码也是相当简单,没有转码的需求,时间也正确显示(因为根本没做分析,当字符串直接返回)。但是该工具包并非真正对外公布,代码中有些不严谨的地方,如System.out的输出,很不爽。而且如果 RSS 的 xml内容如果缺少部分不常用元素,它也会printStackTrace一大串,服了它了。另外还有一个大问题,就是当我用它解析 百度新闻的时候,直接就报错:org.xml.sax.SAXParseException: 字符转换错误:“Unconvertible UTF-8 character beginning with 0xb0”。网上查了查,可能是 java 修改过的 UTF-8 和标准 UTF-8 些微不兼容导致。详情参看 Java 平台中的增补字符 一文。
三. rsslib4j
rsslib4j 是 sourceforget 上的项目,主页是 http://sourceforge.net/projects/rsslib4j,现在最新的版本是0.2,才0.2,可是开发状态却已经是稳定产品化了。同样支持所有RSS版本。
rsslib4j 解析 RSS 的方式和 rssutils 一样,我看了看源码,设计比较简单,代码可读性一般,大量使用if。代码片断如下:
代码
RSSHandler hand = new RSSHandler();
RSSParser.parseXmlFile(new URL(url), hand, false);
RSSChannel ch = hand.getRSSChannel();
System.out.println(ch.toString());
LinkedList lst = hand.getRSSChannel().getItems();
for (int i = 0; i RSSItem itm = (RSSItem) lst.get(i);
System.out.println(itm.toString());
}
看起来也是相当清晰易懂,执行结果也和rssutils一样,不过用它来解析 百度新闻 却不会出现 rssutils 的utf-8编码错误,真是奇怪,两者都是调JAXP的 SAXParser 。不过它的代码也有bug,不能解析出 channel 的一些信息,查看源码,有点简单逻辑错误,修正后解决。想写封email给项目开发者可惜英文不行,通过cvs去commit一下也嫌麻烦,作罢。
总结
Rome:
优 - 1)可扩展性好,有前途。2)功能强大,除了用来解析RSS,还可以聚合和构造RSS。
劣 - 1)兼容性待加强,2)绑定jdom。为什么不喜欢 jdom呢,因为它api 老变,还很绝,搞得不兼容。
rssutils:
优 - 1)代码设计精妙,值得学习。2)附带 taglib 实现,直接可在 jsp 中应用。
劣 - 1)没有源码。 2)兼容性有待加强。 3)功能较弱,只能用来解析RSS,没有聚合和构造RSS功能。
rsslib4j:
优 - 1)简单有效,体积小。2)兼容性不错。
劣 - 1)有小bug。2)功能较弱,只能用来解析RSS,没有聚合和构造RSS功能。
编辑选择: rsslib4j
我只用来读读新浪新闻,rsslib4j 够用就好,不过要自己修改和编译源码。
另外我还找到了一个ThinFeeder: ThinFeeder is an open source software that aims to provide a cross-platform, powerful and tiny RSS / Atom (currently RSS 0.9x, RSS 1.0 / RDF, RSS 2.0 and Atom 0.3) aggregator for desktop, using the Java development language. It has a few goals that wants to make the reading news experience the most pleasant possible:
* Anti-aliasing support on any Operating System
* Skins support
* Multi-language support:
o Catalan
o Dutch
o English
o Esperanto
o French
o German
o Lithuanian
o Portuguese (Brazil)
o Spanish
o Swedish
分享到:
相关推荐
Integrating Open-Source Statistical Packages with ArcGIS
ampack (JAva Matrix PACKage) is a collection of cooperating classes designed to perform matrix computations in Java applications. Jampack was developed by the author at NIST and the University of ...
Pro Freeware and Open Source Solutions for Business is a practical guide for the small business owner seeking viable alternative to expensive commercial software packages and subscriptions. This ...
vendor_qcom_opensource_packages_apps_Bluetooth
Pro Freeware and Open Source Solutions for Business is a practical guide for the small business owner seeking viable alternative to expensive commercial software packages and subscriptions. This ...
j-sim安装程序xml补丁xml-java-packages.zip j-sim安装程序xml补丁xml-java-packages.zip
Oracle 9i Supplied Java Packages Reference Release 2 (9.2)
借助其用户友好的需求编辑器,Packages使非常简单的需求定义变得非常容易,并且仍然允许您使用JavaScript代码编辑器编写更复杂的需求。 如果您需要为应用程序或插件快速创建安装软件包,请将该项目拖到Dock(或...
第六章 包--Concept of Packages 第七章 异常--Exception Handling in Java 第二部分包括: IO Streams in Java--IO系统 Threads--线程 Networking--网络编程 GUI programming overview--GUI编程
Oracle8i Supplied Java Packages Reference Release 3 (8.1.7)
Export-System-Packages组件导出工具-将系统组件导出成.cab格式
将您的 Javatar 包复制到packages文件夹 将您的包信息添加到javatar_packages.json文件中 提交拉取请求 包裹信息示例 { // A package name (should be exactly same as inside .javatar-packages file) "name": ...
Java springBlade微服务开发平台 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.6 、Spring Clou,用前后端分离的模式,前端开源两个框架:Sword (基于 React、Ant Design)、Saber (基于 Vue、...
一款专业的通讯组件包. 运行压缩包中的SETUP.EXE程序,安装完毕后,打开DELPHI,找到所安装的目录(如C:\AsyncPro)中的packages文件夹,打开A40x_Ryy.dpk并编译,打开A40x_Dyy.dpk并装入(其中x为6或7,yy是DELPHI的...
这是构建脚本的集合,这些脚本将以rez包的形式下载,构建和部署各种开源项目。 要了解rez: ://nerdvegas.github.io/rez/ 进行rez-build或不进行rez-build 在可能的情况下,使用rez包装器“ rez-build”和“ rez-...
以下是JavaMe所设计的全部的包: MID Profile All Classes Packages java.io java.lang java.util javax.microedition.io javax.microedition.lcdui javax.microedition.lcdui.game javax.microedition....
开源项目-sridharv-gojava.zip,GoJava - Server/desktop Java bindings to Go packages (based on gobind)