`
zjut2006
  • 浏览: 8163 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java开源RSS组件包(Java Open Source RSS Lib Packages)(转)

阅读更多

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

  • rome-0.9.zip (1.4 MB)
  • 描述: rss解析工具(开源)
  • 下载次数: 572
分享到:
评论
1 楼 snowolf 2008-08-13  
文章很不错~,谢谢分享。

相关推荐

    Integrating Open-Source Statistical Packages with ArcGIS.ppt

    Integrating Open-Source Statistical Packages with ArcGIS

    src java source

    标题中的"src java source"表明这是一个与Java源代码相关的项目或库。在软件开发中,`src`目录通常用于存放源代码,而`java`目录则是在`src`下的一个标准结构,用于放置Java编程语言的源文件。源代码(source)是...

    vendor_qcom_opensource_packages_apps_Bluetooth

    标题 "vendor_qcom_opensource_packages_apps_Bluetooth" 指的是一个特定的Android系统组件,它是高通(Qualcomm)为蓝牙应用提供的开源包。这个组件主要涉及到Android设备中的蓝牙功能实现,尤其是在基于高通芯片的...

    no webp-imageio in java.library.path(webp-imageio-0.4.2.jar dll so)

    in java.library.path的解决办法及eclipse配置 java一般使用两个path:classpath 和 java.library.path classpath是指向jar包的位置 ...2:在vm arguments里添加-Djava.library.path= /usr/local/lib

    j-sim安装程序xml补丁xml-java-packages.zip

    在本教程中,我们将详细探讨J-Sim的安装过程,并特别关注其中的XML补丁——xml-java-packages.zip,以及它所包含的xalan.jar、crimson.jar和jaxp.jar这三个关键组件。 首先,让我们理解J-Sim的安装程序。J-Sim是一...

    Oracle8i Supplied Java Packages Reference Release 3 (8.1.7)

    Oracle8i Supplied Java Packages Reference Release 3 (8.1.7) 是 Oracle 公司发布的一份关于 Java 包的参考手册。本手册的主要目的是提供关于 Oracle8i 中 Java 包的详细信息,以便开发者更好地使用这些包。 首先...

    java矩阵包Jampack: A Java Matrix Package

    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 ...

    Open Packages-开源

    标题 "Open Packages-开源" 暗示了我们讨论的主题是关于开源软件的包管理,这通常涉及到如何在开源环境中组织、分发和管理代码库。开源软件是指那些源代码可以自由查看、修改和分发的软件,它促进了全球开发者社区的...

    Oracle 9i Supplied Java Packages Reference Release 2 (9.2)

    Oracle 9i 供给 Java 包参考手册Release 2(9.2) Oracle 9i 供给 Java 包参考手册Release 2(9.2)是 Oracle 公司发布的一份关于 Java 包的参考手册,该手册主要面向 Oracle 9i 数据库管理系统的开发者和管理员,...

    springboot 报错:no libsigar-amd64-linux.so in java.library.path 时所需安装包

    在使用Spring Boot开发Java应用程序的过程中,可能会遇到一个特定的错误提示:“no libsigar-amd64-linux.so in java.library.path”。这个错误是由于系统缺少一个名为libsigar的库,特别是其AMD64架构的Linux版本,...

    was not found on the java.library.path

    这通常发生在Java程序试图使用Java Native Interface (JNI) 或其他依赖本地库的组件时。 Apache的APR(Apache Portable Runtime)是Apache HTTP服务器项目的一部分,它提供了一组C语言接口,用于操作系统级别的功能...

    java的嵌入式开发包

    它包括配置(Configurations)、配置文件(Profiles)和可选包(Optional Packages),如Connected Limited Device Configuration (CLDC) 和Mobile Information Device Profile (MIDP),这些都为嵌入式设备提供了...

    Word转pdf java实现

    接下来,我们来看Docx4j,这是一个强大的Java库,用于处理Open XML文件格式,如Word、Excel和PowerPoint。虽然它主要用于创建和编辑Word文档,但也可以用来转换Word到PDF。Docx4j的转换过程相对复杂,因为它需要一个...

    《云计算网络技术与应用》实训中用到的Packages包,自行取用(openvswitch安装包在里面)

    《云计算网络技术与应用》实训中的核心是OpenvSwitch(OVS)的安装与配置,这是一个开源的虚拟交换机项目,广泛应用于数据中心、云环境和SDN(软件定义网络)场景。OpenvSwitch提供了高性能的多层交换能力,支持多种...

    Export-System-Packages组件导出工具

    "Export-System-Packages"组件导出工具是一个用于操作系统维护和管理的重要实用程序,它能够帮助用户将系统中的各种组件打包成.cab( Cabinet)格式的文件。CAB格式是微软开发的一种压缩文件格式,常用于软件安装包...

    android_source_libcore+packages

    在Android系统中,`libcore`和`packages`是两个非常关键的组件,它们构成了Android操作系统的核心服务和应用程序框架。让我们深入探讨这两个组件以及与它们相关的`frameworks`文件夹。 `libcore`是Android系统中的...

Global site tag (gtag.js) - Google Analytics