`
wangcheng
  • 浏览: 1460585 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

用ROME创建RSS服务

阅读更多

1.RSS标准

RSS标准比较混乱,主要有以下3个系列

  •  RSS 0.9x / 2.0 : RSS技术诞生于1999年的网景公司(Netscape),其发布了一个0.9版本的规范。2001年,RSS技术标准的发展工作被Userland Software公司的戴夫 温那(Dave Winer)所接手。陆续发布了0.9x的系列版本。当W3C小组发布RSS 1.0后,Dave Winer不承认其有效性。并于2002年9月独自把RSS升级到了2.0版本(Really Simple Syndication),并交由哈佛大学Technology at Harvard Law进行维护。
  • RSS 1.0 : 在RSS发展过程中,为使RSS成为一个通用的规范,并进一步标准化。一个联合小组根据W3C新一代的Resource Description Framework  (RDF) 对RSS进行了重新定义,发布了RSS 1.0版,并把RSS定义为“RDF Site Summary”。现在RSS 1.0版由W3C联合小组维护。
  • Atom : Atom是一个项目的名字,主要是开发一个新的博客摘要格式以解决目前RSS存在的问题(混乱的版本号,不是一个真正的开放标准,表示方法的不一致,定义贫乏等等)。

 2.如何实现RSS

RSS标准虽然混乱,但是其本质都是XML文档。你可以只使用notepad, 按照某个RSS标准, 手写一个xml, 并提供给客户端。

现在也有许多开源项目来提供RSS的解决方案。

Rome https://rome.dev.java.net/

RSSLibJ http://enigmastation.com/rsslibj/

RSSLib4J http://devzone.stealthp.org/cms/index.php?page=RSSLib4J

使用这些解决方案可以更方便的处理RSS.

3.用 Rome 实现 RSS 服务

目前Rome最新版本为rome-0.9. 本例是在Struts的Action中实现的RSS服务.

新建一个RssAction

java 代码
  1. import other classes...   
  2. import com.sun.syndication.feed.synd.SyndFeed;   
  3. import com.sun.syndication.io.SyndFeedOutput;   
  4.   
  5. public class RssAction extends DispatchAction {   
  6.   
  7.     private static final String MIME_TYPE = "application/xml; charset=UTF-8";   
  8.        
  9.     // Rome中RSS的可选标准   
  10.     // rss_0.90, rss_0.91, rss_0.92, rss_0.93, rss_0.94, rss_1.0, rss_2.0, atom_0.3    
  11.     private static final String RSS_TYPE = "rss_2.0";   
  12.   
  13.     public ActionForward newsFeed(ActionMapping mapping,   
  14.             ActionForm form, HttpServletRequest request,   
  15.             HttpServletResponse response) throws Exception {   
  16.         NewsFeedBA newsFeedBA = new NewsFeedBA();   
  17.         newsFeedBA.doExecute();   
  18.         outputRssFeed(response, newsFeedBA.getFeed());   
  19.         return null;   
  20.     }   
  21.   
  22.     public ActionForward blogFeed(ActionMapping mapping,   
  23.             ActionForm form, HttpServletRequest request,   
  24.             HttpServletResponse response) throws Exception {   
  25.         String uid = request.getParameter("userId");   
  26.         BlogFeedBA blogFeedBA = new BlogFeedBA();   
  27.         blogFeedBA.setUserId(uid);   
  28.         blogFeedBA.doExecute();   
  29.         outputRssFeed(response, blogFeedBA.getFeed());   
  30.         return null;   
  31.     }   
  32.        
  33.     //将SyndFeed写入HttpServletResponse   
  34.     private boolean outputRssFeed(HttpServletResponse response, SyndFeed feed) {   
  35.         boolean result = false;   
  36.         feed.setFeedType(RSS_TYPE);   
  37.         response.setContentType(MIME_TYPE);   
  38.         SyndFeedOutput output = new SyndFeedOutput();   
  39.         try {   
  40.             output.output(feed, response.getWriter());   
  41.             result = true;   
  42.         } catch (IOException e) {   
  43.             e.printStackTrace();   
  44.         } catch (FeedException e) {   
  45.             e.printStackTrace();   
  46.         }   
  47.         return result;   
  48.     }   
  49. }  

然后在业务逻辑中,查询数据库,用返回的数据组织相应的Feed.

java 代码
  1. public SyndFeed createFeed(List<newsdto></newsdto> news) {   
  2.     SyndFeed feed = new SyndFeedImpl();   
  3.   
  4.     feed.setTitle("My RSS Service : news ");   
  5.     feed.setLink("http://www.myHomePage.com");   
  6.     feed.setDescription("My first RSS service .");   
  7.        
  8.     feed.setEntries(getEntries(news));   
  9.     return feed;   
  10. }   
  11.   
  12. private List<syndentry></syndentry> getEntries(List<newsdto></newsdto> news) {   
  13.     List<syndentry></syndentry> entries = new ArrayList<syndentry></syndentry>();   
  14.        SyndEntry entry;   
  15.        SyndContent description;   
  16.           
  17.        for (NewsDTO dto : news) {   
  18.            entry = new SyndEntryImpl();   
  19.            entry.setTitle(dto.getTitle());   
  20.            entry.setLink(dto.getLink());   
  21.            entry.setPublishedDate(new Date());   
  22.           
  23.            description = new SyndContentImpl();   
  24.            description.setType("text/html");   
  25.            description.setValue(dto.getContent());   
  26.               
  27.            entry.setDescription(description);   
  28.            entries.add(entry);   
  29.        }   
  30.        return entries;   
  31. }  

 在struts-config.xml中配置RssAction

xml 代码
  1. <action path="/rss" type="com.web.action.RssAction"  
  2.     parameter="method"  
  3.     scope="request">  
  4. action>  

 启动Tomcat,并访问/rss.do?method=newsFeed  就可以得到新闻的RSS

访问/rss.do?method=blogFeed&userId=123 就可以得到123的blog的RSS了。

现在IE7和Opera都集成了RSS功能。

分享到:
评论
2 楼 solid.snake 2008-04-14  
不好意思  点错了  正在研究关于rss的订阅,文章挺有帮助
1 楼 solid.snake 2008-04-14  

相关推荐

    java使用Rome解析Rss的实例

    在这个方法中,我们使用`XmlReader`从URL获取RSS XML内容,然后用`SyndFeedInput`构建了一个`SyndFeed`对象,该对象包含了RSS feed的所有信息,如标题、描述、条目等。 有了`SyndFeed`对象,我们可以方便地访问RSS ...

    rome-1.0RC2rss解析

    Rome 1.0RC2是该项目的一个早期版本,主要提供了RSS和Atom feed的解析、创建和更新功能。在这个版本中,开发者可以利用它来读取、构建和修改RSS 2.0和Atom 1.0 feeds。以下是关于Rome 1.0RC2的关键知识点: 1. **...

    ROME + JDOM轻松实现RSS的操作

    在"ROME + JDOM轻松实现RSS的操作"这个主题中,我们将探讨如何使用这两者来实现RSS的生成和解析。首先,你可以通过以下步骤使用ROME解析RSS URL: 1. 引入ROME库:在项目中添加ROME的依赖,这通常通过Maven或Gradle...

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

    - **RSS阅读器**:使用ROME和rsslib4j,开发者可以创建自己的RSS阅读器应用,让用户能够订阅和管理多个RSS源,获取实时更新。 - **内容聚合**:可以利用这些库将不同来源的RSS feed聚合在一起,形成一个统一的信息流...

    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读和写

    开发者可以使用Rome库轻松地将RSS数据集成到他们的Java应用中,无论是从网络抓取RSS源,还是生成新的RSS内容发布出去。 导入到Eclipse中意味着这是一个Java项目,包含必要的源代码和构建配置。用户可以直接在...

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

    1. **创建RSS Channel对象**:使用Rome库中的`RssChannel`类初始化一个新的RSS频道,设置必要的属性,如频道标题、描述和URL。 2. **添加Items**:向频道中添加`RssItem`对象,每个代表一个单独的RSS条目,包含标题...

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

    Rome库提供了丰富的API,允许开发者轻松地创建、解析和操作RSS和Atom feed。 1. **RSS与Atom简介** RSS是一种XML格式,用于发布经常更新的内容,如博客文章、新闻标题等。RSS feed通常包含摘要、链接和发布日期等...

    jdom和rome1.0包

    通过使用ROME,开发者可以轻松地从网站抓取和解析RSS feed,或者创建自己的RSS feed并发布到网络。 在描述中提到的“rome开发rss”,意味着这个压缩包可能包含了使用ROME库进行RSS开发的相关示例或代码。JDOM的提及...

    java_rss.rar_EXML.jar _RSSLibJ _rome jar_rome.j

    - **创建RSS feeds**:通过使用RSSLibJ或Rome,可以轻松构建RSS feed的XML结构,定义标题、描述、链接、作者等元素。 - **解析RSS feeds**:从RSS源下载XML数据,然后使用库解析成Java对象,以便进一步处理和展示。 ...

    jdom+rome-0.9 jar包合集

    首先,使用JDOM构建XML结构,然后用ROME的API将其转换成RSS格式。例如,可以先使用JDOM创建一个`Document`对象,然后添加`Element`来表示RSS feed的基本信息,如频道(channel)、标题、描述等。接着,为每个内容项...

    可以用的jdom+rome.jar

    5. 如果需要,还可以使用ROME创建新的RSS Feed或更新已有的Feed。 在实际应用中,开发者可能会遇到的问题包括XML解析错误、RSS Feed格式不兼容、网络连接问题等,这些问题都需要通过良好的异常处理和错误排查技巧来...

    jdom+rome JAR包

    当你需要创建RSS feed或者从RSS源中提取信息时,ROME是非常有用的工具。 使用ROME,你可以执行以下任务: 1. **创建RSS Feed**:通过构建Feed、Item等对象,可以创建符合RSS规范的馈送结构。 2. **解析RSS Feed**:...

    rome源码包和jar包

    通过了解和使用Rome,开发者可以轻松地实现对网络新闻聚合的需求,比如解析百度RSS新闻的不同栏目,获取实时资讯。 1. **Rome框架概述** - Rome是一个轻量级的Java库,专注于XML feeds的处理,支持RSS 0.9x, RSS ...

    rome-0.9.jar

    Rome库就是这样一个工具,它是一个Java库,专门用于RSS(Really Simple Syndication)和Atom feed的创建、解析和管理。这里的"rome-0.9.jar"是一个特定版本的Rome库的归档文件,通过它,开发者可以轻松地在Java应用...

    rome-1.0.jar rome.jar 源码

    "rome-1.0.jar" 和 "rome.jar" 是两个这样的库,它们主要用于处理RSS(Really Simple Syndication)和Atom格式的数据,即新闻聚合和内容发布的标准。这些jar文件包含了处理这些格式的类和方法,使得开发者无需从头...

    Rss,Atom聚合规范的XML文件解析(Rome,rssutils)

    使用Rome,开发者可以方便地创建一个RSS或Atom feed解析器,读取XML文件中的条目,或者创建新的feed并将其发布到网络上。例如,通过Rome,你可以实现以下功能: 1. 解析XML文件:使用`RomeFeedReader`类,可以读取...

    rome0.9

    通过Rome0.9,开发者可以快速地构建RSS和Atom服务,提高开发效率,同时也能更好地与现有的RSS生态系统兼容。对于需要处理RSS内容的Java应用程序,Rome0.9是一个强大而实用的工具。 总结来说,Rome0.9是RSS和Atom...

    Rome0.9

    6. **API友好**:Rome0.9的API设计简洁,易于理解和使用,使得开发者可以快速地实现RSS相关的功能,无需深入理解RSS规范的细节。 在实际应用中,Rome0.9可以用于构建RSS阅读器、内容聚合服务、新闻推送系统等。例如...

Global site tag (gtag.js) - Google Analytics