`

自动生成Rss

阅读更多
前几天写了个解析Rss文件的一个例子,这几天写了个基于Rome生成Rss文件的工具类,发布上来共享下。希望对大家有所帮助。

  工具类里用的Jar包为Rome.jar,JDom.jar,感兴趣的朋友可以自己下载,也可以从我的上篇文件里下载到。

  存在两个POJO类:ChannelItem类和ChannelEItem类,ChanneEItem类继承自ChannelItem类,多一个Enclosure属性,用于存在流媒体文件的类里使用。

  具体代码如下,ChannelItem类:

import java.util.Date;

/**
 * 频道下的子信息
 * 此类无流媒体播放文件
 * @author jackZhang
 *
 */
public class ChannelItem{
 private String title;//Rss文件中Item的标题
 private String link;//Rss文件中Item对应的连接
 private String description;//Item的描述
 private Date pubDate;//Item发布的时间
 private String author;//Item作者
 private String category;//Item所属的频道范畴
 
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public String getLink() {
  return link;
 }
 public void setLink(String link) {
  this.link = link;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public Date getPubDate() {
  return pubDate;
 }
 public void setPubDate(Date pubDate) {
  this.pubDate = pubDate;
 }
 public String getAuthor() {
  return author;
 }
 public void setAuthor(String author) {
  this.author = author;
 }
 public String getCategory() {
  return category;
 }
 public void setCategory(String category) {
  this.category = category;
 }
}


ChannelEItem类,具体代码:

/**
 * 用于添加频道的子项
 * 当存在流媒体播放文件时使用此类
 *
 * @author jackZhang
 *
 */
public class ChannelEItem extends ChannelItem{
 private String enclosure;//流媒体文件

 public String getEnclosure() {
  return enclosure;
 }

 public void setEnclosure(String enclosure) {
  this.enclosure = enclosure;
 }
}



以下是具体的Rss生成器封装类RssBuildFactory,具体代码:
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndCategoryImpl;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEnclosure;
import com.sun.syndication.feed.synd.SyndEnclosureImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.SyndFeedOutput;
import com.yx.xml.bo.ChannelEItem;
import com.yx.xml.bo.ChannelItem;

/**
 * 用于生成Rss文件
 * @author jackZhang
 *
 */
public class RssBuildFactory {
 private SyndFeed feed;
 @SuppressWarnings("unchecked")
 private List entries;
 private SyndEntry entry ;
 @SuppressWarnings("unchecked")
 public RssBuildFactory(){
  feed = new SyndFeedImpl();
  feed.setFeedType("rss_2.0");
  entries = new ArrayList();
 }
 /**
  * 创建一个频道
  * @param title 频道标题
  * @param link 频道对应的连接
  * @param description 频道描述
  * @param language 频道所用语言
  * @param pubDate 频道发布时期
  * @param copyright 版权所有
  * @throws Exception
  */
 public void buildChannel(String title,String link,String description,String language,Date pubDate,String copyright) throws RuntimeException {
  feed.setTitle(title);
  feed.setLink(link);
  feed.setDescription(description);
  feed.setLanguage(language);
  feed.setPublishedDate(pubDate);
  feed.setCopyright(copyright);
 }
 
 /**
  * 添加频道的子内容
  * @param item [email={@link]{@link[/email] ChannelItem}
  * @throws Exception
  */
 @SuppressWarnings("unchecked")
 public void buildItems(ChannelItem item) throws RuntimeException {
  entry = new SyndEntryImpl();
  //设置新闻标题
  entry.setTitle(item.getTitle());
  //设置新闻的连接地址
  entry.setLink(item.getLink());
  //设置新闻简介
  SyndContent content = new SyndContentImpl();
  content.setType("text/plain");
  content.setValue(item.getDescription());
  entry.setDescription(content);
  //设置发布时间
  entry.setPublishedDate(item.getPubDate());
  //设置频道所属的范围
  SyndCategory cate = new SyndCategoryImpl();
  cate.setName(item.getCategory());
  List cateList = new ArrayList();
  cateList.add(cate);
  entry.setCategories(cateList);
  //设置作者
  entry.setAuthor(item.getAuthor());
  //将新闻项添加至数组中
  entries.add(entry);
 }
 
 /**
  * 添加频道的内容项
  * @param item [email={@link]{@link[/email] ChannelEItem}此类继承自ChannelItem类
  * @throws Exception
  */
 @SuppressWarnings("unchecked")
 public void buildItems(ChannelEItem item) throws RuntimeException {
  entry = new SyndEntryImpl();
  //设置新闻标题
  entry.setTitle(item.getTitle());
  //设置新闻的连接地址
  entry.setLink(item.getLink());
  //设置新闻简介
  SyndContent content = new SyndContentImpl();
  content.setValue(item.getDescription());
  entry.setDescription(content);
  //设置发布时间
  entry.setPublishedDate(item.getPubDate());
  //设置频道所属的范围
  SyndCategory cate = new SyndCategoryImpl();
  cate.setName(item.getCategory());
  List cateList = new ArrayList();
  cateList.add(cate);
  entry.setCategories(cateList);
  //设置作者
  entry.setAuthor(item.getAuthor());
  //设置流媒体播放文件
  SyndEnclosure en = new SyndEnclosureImpl();
  en.setUrl(item.getEnclosure());
  List enList = new ArrayList();
  enList.add(en);
  entry.setEnclosures(enList);
  //将新闻项添加至数组中
  entries.add(entry);
 }
 
 /**
  * 生成XML文件
  * @param filePath 文件保存路径和名称
  * @throws Exception
  */
 public void buildChannel(String filePath) throws Exception {
  feed.setEntries(entries);
  SyndFeedOutput output = new SyndFeedOutput();
  Writer writer; 
  writer = new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8");
  output.output(feed, writer);  
 }
}




下面是一个示例,用于测试生成Rss:

前提说明本人测试使用的Mysql数据库,数据库存在一个newsitem表用于储存Rss内容。

public void testBuildObject() {
  try {

 //建立数据库的连接
   DBConnection db = new DBConnection();

 //查询Sql语句
   String querySql = "select * from newitem";

   //getAllResult方法是一个查询方法,感兴趣的话也可以自己写
   ResultSet rs = db.getAllResult(querySql);

 //建立Rss生成器工厂
   RssBuildFactory builder = new RssBuildFactory();

   //循环遍历数据库记录生成Rss中的Item项
   while (rs.next()) {
    ChannelEItem item = new ChannelEItem();
    item.setTitle(rs.getString("title"));
    item.setLink(rs.getString("link"));
    item.setDescription(rs.getString("description"));
    item.setPubDate(rs.getDate("pubdate"));
    item.setCategory(rs.getString("category"));
    item.setAuthor(rs.getString("author"));
    item.setEnclosure(rs.getString("enclosure"));
    builder.buildItems(item);
   }

   //建立Rss的Channel信息
   builder.buildChannel("Jack的测试", "[url=http://www.51msh.com/]www.fansgoo.com[/url]", "测试生成", "zh-cn",
     new Date(), "名声网");

 //设置Rss文件的生成路径
   builder.buildChannel("E:\\demo.xml");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }



感兴趣的朋友也可以直接下载本人提供的上面类的Jar文件,方面于使用。
分享到:
评论

相关推荐

    rss.jar 一个生成rss的jar包

    2. 博客系统:博主可以自动生成RSS链接,供读者订阅。 3. 内容管理系统:自动创建RSS输出,便于内容分发。 4. 自动化脚本:在需要动态生成RSS内容的场景下,通过调用rss.jar的API,实现自动化处理。 六、总结 rss....

    常用Rss,生成解析Rss,

    - 使用在线工具或编程语言(如Python的feedparser库)自动生成RSS源。 3. **解析RSS** 解析RSS意味着从RSS源中提取信息,以便在应用程序或浏览器中显示。这可以通过RSS阅读器完成,阅读器能识别并处理XML格式的...

    网站加入RSS功能(RSS阅读与制作阅读器的feed)

    这使得网站可以根据数据库中的最新内容自动生成RSS源。 3. **RSS feed创建**:RSS feed由频道(channel)和条目(item)组成。频道包含了RSS源的基本信息,如标题、描述、链接,而条目则代表每篇文章或新闻。在JSP...

    RSS生成器让外链收录更多

    在压缩包中的“rss生成器”文件可能是这样一个工具的软件或脚本,使用者可以利用这个工具快速为自己的网站生成RSS feed,从而实现上述的各种优势。在使用之前,建议先了解RSS的基本原理和规范,以及生成器的具体操作...

    rss生成的实例,达到网站内容的聚合效果

    在本实例中,开发者可能已经编写了代码,使得网站能够自动生成RSS馈送,以聚合网站的内容。 描述中提到“IE7 8 和ff正常显示”,这表明该实例创建的RSS馈送在Internet Explorer 7、8和Firefox浏览器中可以正常解析...

    网站RSS化简明指南

    对于动态网站,可以通过编程语言如ASP与数据库集成,自动生成RSS输出。例如,提供的ASP+ACCESS模板允许根据数据库内容动态生成RSS文件。这种模板需要调整数据库连接参数和字段映射,以适应网站的具体需求。一旦配置...

    [其他类别]网站RSS订阅功能插件RSSMaker JSP版 v1.0_rssmaker_jsp(毕设 + 课设).zip

    该插件能够自动生成RSS feed,使网站内容能够被RSS阅读器识别并订阅,方便用户追踪和管理他们感兴趣的内容。JSP技术是Java Web开发的一部分,它允许开发者在HTML页面中嵌入Java代码,实现动态网页的生成。 在毕设或...

    ASP+SQL RSS新闻管理系统

    2. **RSS生成器**:根据数据库中的新闻数据自动生成RSS feed文件。 3. **前端展示**:设计友好的用户界面,展示新闻列表,并提供RSS订阅链接。 4. **数据库恢复**:使用SQL工具将备份文件还原到数据库服务器,确保...

    [其他类别]网站RSS订阅功能插件RSSMaker JSP版 v1.0_rssmaker_jsp.zip

    1. **自动生成RSS Feed**:根据网站内容自动生成符合RSS标准的XML文件,确保订阅者能及时获取到最新的文章或更新。 2. **定制化配置**:允许开发者根据网站结构和需求配置RSS feed的结构和内容,如设置标题、描述、...

    网站RSS订阅功能插件RSSMaker ASP.net版_aspx开发教程.rar

    4. **整合RSSMaker ASP.NET版**:RSSMaker插件可以简化上述过程,它提供了API和配置选项,使得开发者只需配置相关参数,即可自动生成RSS Feed,无需手动编写大量XML代码。 5. **集成到网站**:在ASP.NET网站的合适...

    CMS程序Rss插件0.1 For Ecms-rss-ecms.zip

    在Ecms系统中安装这个插件后,网站可以自动生成RSS feeds,让访客可以订阅并接收网站新闻、文章或者任何其他类型内容的更新。 Ecms,全称可能是"企业内容管理系统",是一个用于构建和管理网站内容的平台,通常包括...

    RSS 在线阅读器开发

    6. **RSS文件生成**:网站可以通过手动编写或使用工具自动生成RSS格式的文件,以提供RSS支持。RSS文件应包含频道信息(如标题、链接和描述)以及各个条目的详细信息(如标题、链接和描述)。 7. **浏览器扩展和集成...

    ASP.NET-[其他类别]网站RSS订阅功能插件RSSMakerASP.net版.net.zip

    1. **自动生成RSS Feed**:RSSMaker能根据网站的内容动态生成RSS feed,确保每次内容更新时,feed都会同步更新。 2. **个性化设置**:允许开发者根据自己的需求定制RSS feed的结构和内容,包括但不限于标题、描述、...

    RSS从入门到精通(初级版)-PDF、实例代码、jar包.rar

    2. **RSS生成**:编写代码自动生成RSS feed,包括创建频道、添加条目等。 3. **RSS验证**:检查RSS XML是否符合标准的代码示例。 4. **RSS阅读器**:简易RSS阅读器的实现,展示如何与RSS源交互并显示内容。 jar包...

    ASP.NET RSS工具包

    这对于开发新闻聚合平台或自动生成RSS Feed的网站非常有用。 5. **RSS验证**:工具包可能包含RSS验证功能,确保创建的RSS Feed符合规范。验证可以帮助检测XML语法错误,保证数据的准确性和兼容性。 6. **缓存和...

    互联网业界RSS

    为了创建和发布RSS源,网站所有者通常需要在后台设置RSS生成器或使用特定的CMS(内容管理系统),如WordPress,它们会自动生成RSS feed。同时,为了让用户更容易发现RSS订阅选项,网站通常会在页脚或菜单栏中放置一...

    Laravel开发-rss-l5

    现在,当你访问`/feed`路径时,Laravel将自动生成RSS feed。为了优化性能,可以考虑缓存生成的feed,这样对大量请求时响应更快。 此外,你还可以自定义feed项的构造,比如添加自定义链接、日期、作者等信息。通过`...

    [其他类别]网站RSS订阅功能插件RSSMaker ASP.net版_rssmaker_asp.net.zip

    这个插件可以帮助网站管理员自动生成RSS feed,让用户通过RSS阅读器获取最新的网站更新,无需频繁访问网站。 【描述】:“源码参考,欢迎下载” 这句话表明这个压缩包中包含了RSSMaker ASP.NET插件的源代码。对于...

    RSSMaker(php版)

    它可能支持从数据库查询结果、数组或其他数据结构中自动抽取信息,并自动生成RSS结构。 使用RSSMaker(php版)可以极大地简化RSS订阅服务的开发工作,让开发者能够专注于内容的管理和呈现,而不是XML的编写。通过理解...

    一分流水整站程序 v5.0

    新闻、文章、下载的完善分类 文章、下载系统可进行无组件上传 可对上传文件类型、大小、上传目录进行设置 Flash与ASP结合的华丽投票系统 自动生成RSS订阅服务 分类别的友情连接 友情...

Global site tag (gtag.js) - Google Analytics