`
niedhui
  • 浏览: 12207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ROME读取RSS

阅读更多

Rome是一个用来操作RSS的java开源库,它可以用来读取和生成RSS。支持的RSS看版本从0.90到2.0,同时也支持Atom 0.3和Atom1.0。
如果只是用Rome读取RSS或Atom源是比较简单的,最简单的情况只要几行代码就可以了。
官方WIKI的代码

URL feedUrl = new URL(".....");
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new 
   inputStreamReader(feedUrl.openStream()));


这样就通过Rss或Atom的地址创建了SyndFeed对象,通过SyndFeed,我们可以获取Rss源返回的信息,如SyndFeed的getEntries方法可以返回一个List<SyndEntry>列表,用以表示Rss中的每一项内容。如:

List<SyndEntry> entries = feed.getEntries();
for (SyndEntry entry : entries) {
  String title=entry.getTitle();
  Date publishDate=entry.getPublishedDate();
  String content=entry.getDescription().getValue();
  ...
}
 


基本上这样就可以简单的用来读取RSS和Atom了,不过有一些RSS的pubshedDate的格式比较特殊,并不在ROME的默认的支持的日期格式中。com.sun.syndication.io.impl.DateParser定义一些默认的日期格式,这可以用来満足大部分需要。
目前我遇到过两种不被支持的日期格式
1、可以用SimpleDateFormat来解悉的
拿百度空间做例子,它返回的日期格式是
<pubDate>2008-07-25 15:59</pubDate>
这个解决起来比较简单。因为ROME支持自定义的日期格式,所以只要在工程下面创建一个rome.properties文件,并在下面加上一行

datetime.extra.masks=yyyy-MM-dd hh:mm


就可以了。Rome中的DateParser类在尝试了所有的默认的日期格式以后发现还是不能解悉,就会去尝试rome.properties这文件中的的日期格式。因为DateParser最终也是通过SimpleDateFormat来解释日期的,所以自定义的日期格式应该是能被java中的SimpleDateFormat接受的才可以
2、不可以用SimpleDateFormat来解悉的
拿新浪来做例子,它返回的日期格式如下:
<pubDate>Mon, 21 Jul 2008 18:53:00 GMT+8</pubDate>
当用SimpleDateFormat来解悉这个日期时,最接近的pattern是EEE, dd MMM yyyy HH:mm:ss z
但这个是不能被解悉的,如下代码

		String sDate = "Mon, 21 Jul 2008 18:53:00 GMT+8";
		SimpleDateFormat df = new SimpleDateFormat(
				"EEE, dd MMM yyyy HH:mm:ss z",Locale.US);
		ParsePosition pp = new ParsePosition(0);
		Date d = df.parse(sDate, pp);
		if (pp.getIndex() != sDate.length()) {
			d = null;
		}
		System.out.println(d);


最后显示的是null,为了符合这个标准,要将 Mon, 21 Jul 2008 18:53:00 GMT+8这个改为 Mon, 21 Jul 2008 18:53:00 GMT+08:00才可以,关于TimeZone的转换,可通过
TimeZone.getTimeZone(“GMT+8”).getID()这个方法,这样返回的字符串为GMT+08:00。
由于无法通过rome.properties方法来解决,目前我只想到了一个比较笨的方法(希望以后可以找到更好的方法),写了一个WireFeedInput的子类,并覆盖了build方法,

public WireFeed build(Reader reader) throws IllegalArgumentException, FeedException {
			SAXBuilder saxBuilder = createSAXBuilder();
			try {
				if (getXmlHealerOn()) {
					reader = new XmlFixerReader(reader);
				}
				Document document = saxBuilder.build(reader);
			    //处理日期将换
				return build(document);
			} 
}


在ROME的xml文件解悉为Document之后,遍历Doument的元素,然后将日期元素的值进行转换。
使用时,如果是新浪的rss,则

		WireFeedInput wfi = new CustomWireFeedInput(false);
		WireFeed input = wfi.build(new XmlReader(url));
		feed = new SyndFeedImpl(input);


这样创建WireFeed 对象。

 

分享到:
评论
1 楼 jolestar 2010-03-16  
我直接把GMT+8当字符串处理了。
在配置文件里加了这样一个format
EEE, dd MMM yyyy HH:mm:ss 'GMT+8'

相关推荐

    java使用Rome解析Rss的实例

    然后,我们创建一个方法来读取并解析RSS feed: ```java public SyndFeed parseRssFeed(String feedUrl) throws Exception { URL url = new URL(feedUrl); InputStream is = url.openStream(); SyndFeedInput ...

    rome-1.0RC2rss解析

    在这个版本中,开发者可以利用它来读取、构建和修改RSS 2.0和Atom 1.0 feeds。以下是关于Rome 1.0RC2的关键知识点: 1. **RSS和Atom Feed解析**:Rome库提供了`RSSModule`和`AtomModule`类,它们实现了JSR 172...

    利用Rome解析Rss

    Rome 的主要功能包括解析器和生成器,解析器可以从一个网址、一个本地文件或文件流中读取转换数据,而生成器可以将 SyndFeed 对象输出成程序所指定的数据格式。SyndFeed 是 Rome 提供的一个中间对象,包括了源数据中...

    JSP读取RSS实例

    在这个实例中,我们看到的是如何使用JSP来读取RSS(Really Simple Syndication)源。 **RSS**是一种XML格式的数据,常用于发布新闻、博客更新等信息,使得用户可以通过RSS阅读器订阅并获取最新内容。RSS文件通常...

    ROME + JDOM轻松实现RSS的操作

    本篇文章将详细介绍如何利用Java中的ROME库和JDOM库来轻松实现RSS的操作。 首先,让我们了解一下ROME库。ROME是一个开源的Java库,它为处理RSS和Atom feeds提供了一种简单的方法。它包含了RSS和Atom feed的解析、...

    读取rss依赖lib

    为了在Java中读取RSS feed,你可以创建一个Rome的`RSSReader`实例,然后使用它来获取feed。以下是一个简单的示例代码: ```java import java.net.URL; import org.jdom2.Document; import org.jdom2.input....

    RSS开源框架ROME1.0下载集合

    rsslib4j是一个Java库,专门用于读取、写入和处理RSS feeds。它提供了类似于ROME的功能,但可能具有不同的实现和特定的优化。这两个文件分别提供了库的二进制版本和源代码,使得开发者可以选择使用或研究这个库来...

    基于Rome做的Rss读和写

    【描述】中的“rss读写功能”指的是开发应用程序时实现的两个关键操作:解析RSS源(读取)和创建或更新RSS源(写入)。这个项目可能提供了一个简单的解决方案,让用户能够方便地处理RSS数据,而无需深入了解RSS的...

    RSS.zip_Rome.jar_java r_java rss_rss feed jar_rss java

    这可能是几个独立的Java类或一个完整的项目,展示了如何使用Rome来读取、创建和管理RSS源。 标签“rome.jar java_r java_rss rss_feed_jar rss_java”进一步确认了这个资源包的核心内容:Rome库的jar文件,以及与...

    rome,用于rss和atom提要的java库.zip

    Rome是一个广受欢迎的开源Java库,专门设计用于处理RSS(Really Simple Syndication)和Atom提要。这些格式常用于发布新闻、博客和其他在线内容的更新,使得用户可以通过订阅来获取最新的信息。Rome库提供了丰富的...

    rome-1.0 jdom 第一个RSS发布实例

    标题中的“rome-1.0 jdom 第一个RSS发布实例”揭示了本次讨论的主要内容,涉及到两个关键的Java库——Rome和JDOM,以及如何使用它们来创建和发布RSS(Really Simple Syndication) feed。RSS是一种XML格式,用于发布...

    jdom和rome1.0包

    ROME支持多种版本的RSS,包括RSS 0.91、RSS 1.0、RSS 2.0以及Atom 0.3和Atom 1.0。通过使用ROME,开发者可以轻松地从网站抓取和解析RSS feed,或者创建自己的RSS feed并发布到网络。 在描述中提到的“rome开发rss”...

    RSS发布(生成XML)和读取URL

    在描述中提到的“博文链接”,可能是一个详细的教程,讲解如何使用Java来生成RSS XML文件和读取RSS URL。通常,这会涉及到以下几个步骤: 1. **生成RSS XML**:这通常需要使用Java的XML处理库,如JDOM(Java ...

    RSS种子读取资料

    RSS种子读取,频道解析,详细信息读取 根据RSSUrl获取所有List数据(Rome1.0) Rome优点:1.可扩展性好。2.功能强大,除了用来解析RSS,还可以聚合和构造RSS。 Rome缺点:1.兼容性待加强.2.绑定jdom。

    java_rss.rar_EXML.jar _RSSLibJ _rome jar_rome.j

    它提供了一系列接口和类,用于读取、写入、创建和更新RSS feeds。开发者可以使用RSSLibJ来订阅RSS源,获取新的feed项,甚至可以创建自己的RSS feed。这个库简化了RSS相关的编程工作,让开发者无需深入了解RSS规范的...

    rome-1.0.jar rome.jar 源码

    3. **研究核心类**:找到关键类,如`RSSReader`和`RSSWriter`,它们负责读取和写入RSS数据;`AtomParser`和`AtomWriter`对应Atom格式。这些类的实现提供了与RSS和Atom交互的主要接口。 4. **解析流程**:分析XML...

    rome源码包和jar包

    - Rome是一个轻量级的Java库,专注于XML feeds的处理,支持RSS 0.9x, RSS 1.0, RSS 2.0, Atom 0.3 和 Atom 1.0 格式。 - 它提供了丰富的API,用于解析和生成feed,方便开发者进行数据操作和定制化开发。 - Rome的...

    可以用的jdom+rome.jar

    《JDOM与ROME:解析与聚合RSS Feed的实用组合》 在Java开发中,处理XML文档是一项常见的任务,而JDOM(Java Document Object Model)和ROME(Really Simple Syndication)库则是为此目的而设计的强大工具。这两个库...

    jdom+rome JAR包

    而"jdom+rome JAR包"是两个Java库,用于帮助开发者更方便地处理XML文档,并创建和管理RSS馈送。 **JDOM库** JDOM,全称Java Document Object Model,是一个为Java平台设计的DOM(Document Object Model)实现。...

Global site tag (gtag.js) - Google Analytics