`

关于RSS的聚合---OPML

阅读更多

关于RSS的聚合---OPML

关键字: rss,opml
  OPML也是最近才发现的一个东东,以前只知道解析Rss,前几天老总问我要这个东西的时候我才知道,还有OPML的存在。 

  什么是OPML呢?说白啦,就是把你的网站的RSS聚合在一起生成的一个OPML文件,主要也就是方便RSS文件的提交。 

  对OPML还没有做太深入的理解,在网上查了查,发现没有那个开源项目可以用的,有Jakarta下的一个开源项目可以使用(FeedParser),可是好像是项目还没有完成啦,在Apache里没有找到下载。还有一个Informa也可以做,不过从2004年之后就没有组织再对其进行更新和维护啦。 

  想来想去决定用FreeMarker做去,以模板的形式生成一个opml.ftl模板文件。模板文件如下: 

Java代码 
  1. <?xml version="1.0" encoding="utf-8" ?>   
  2. <opml version="1.0">  
  3.   <head>  
  4.    <title>${title}</title>   
  5.    <dateCreated>${pubDate}</dateCreated>   
  6.    <ownerName>${owner}</ownerName>   
  7.    <ownerEmail>${email}</ownerEmail>   
  8.    <description>${title}</description>   
  9.    <createdBy>${builder}</createdBy>   
  10.    <link>${link}</link>   
  11.   </head>  
  12.   <body>  
  13.   <outline title="${title}" text="${title}" opml="" kind="nkPath">  
  14.     <#list typeList as type>  
  15.      <outline title="${type.title}" text="${type.title}" type="rss" xmlUrl="${buildPath}/news/rss/${type.typecode}.xml" interval="60" itemMax="400" htmlUrl="" description="${type.title}" kind="nkFeed" />   
  16.     </#list>   
  17.    </outline>  
  18.   </body>  
  19. </opml>  


完成所需要的模板文件后,就要对模板文件进行生成啦。我使用的技术是Struts2+Spring+Hibernate+Dwr实现的,生成文件的那点是使用Dwr去实现的。具体的生成代码如下: 
Java代码 
  1. public String opmlBuild(String typeCode, String fileName, String owner,  
  2.    String email, String builder, String link, String buildPath,  
  3.    HttpServletRequest request, HttpServletResponse response) {  
  4.   String result = "";  
  5.   try {  
  6.    response.setContentType("text/opml");  
  7.    response.setCharacterEncoding("utf-8");  
  8.    String ftlPath = request.getSession().getServletContext()  
  9.      .getRealPath("/")  
  10.      + "//WEB-INF//ftl//";  
  11.    String path = request.getSession().getServletContext().getRealPath(  
  12.      "/");  
  13.    // String ftlPath = ftl + "//ftl//";  
  14.    config.setDirectoryForTemplateLoading(new File(ftlPath));  
  15.    // 得到模板文件  
  16.    Template template = config.getTemplate("opml.ftl");  
  17.    // 设置编码格式  
  18.    template.setEncoding("utf-8");  
  19.    YxNewsType type = typeNews.getTypeByTypeCode(typeCode);  
  20.    List<YxNewsType> typeList = typeNews  
  21.      .getAllChildTypeByTypeCode(typeCode);  
  22.    if (typeList != null) {  
  23.     Map root = new HashMap();  
  24.   
  25.   //设置发布的OPML的标题  
  26.     root.put("title", type.getTitle());  
  27.   
  28.     //设置OPML的发布时间  
  29.     root.put("pubDate"new Date().toString());  
  30.   
  31.     //设置OPML的所有者  
  32.     root.put("owner", owner);  
  33.   
  34.   //设置OPML的发布者的EMail地址  
  35.     root.put("email", email);  
  36.   
  37.     //设置OPML的创建人  
  38.     root.put("builder", builder);  
  39.   
  40.     //设置OPML文件的连接地址,可以直接你网站的连接地址  
  41.     root.put("link", link);  
  42.   
  43.   //设置自己的创建Rss的连接地址  
  44.     root.put("buildPath", buildPath);  
  45.     root.put("typeList", typeList);  
  46.     // 设置到生成的文件名称  
  47.   
  48.     String file = "";  
  49.   
  50.   //判断当前操作系统,如果是Windows系统的做就是反斜杠,如果是Linux系统就使用正斜杠  
  51.     Properties properties = System.getProperties();  
  52.     Object object = properties.get("os.name");  
  53.     // System.out.println("当前操作系统:" + String.valueOf(object));  
  54.     if ("Windows".equals(String.valueOf(object))) {  
  55.      file = path + "\\rss\\opml\\" + fileName + ".opml";  
  56.     } else {  
  57.      file = path + "//rss//opml//" + fileName + ".opml";  
  58.     }  
  59.   
  60.     //设置要生成的文件  
  61.     Writer out = new OutputStreamWriter(new FileOutputStream(file),  
  62.       "utf-8");  
  63.     template.process(root, out);  
  64.   
  65.   //清理写入流  
  66.     out.flush();  
  67.   
  68.     // 关闭流文件  
  69.     out.close();  
  70.     result = "buildSuccess";  
  71.    } else {  
  72.     result = "noChild";  
  73.    }  
  74.   } catch (Exception e) {  
  75.    result = "error";  
  76.    e.printStackTrace();  
  77.   }  
  78.   return result;  
  79.  }  

  
上面方法中的参数是通过Dwr传递过来的,下面是页面JSP文件: 

Java代码 
  1. <%@ page language="java" pageEncoding="GBK"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5.  <head>  
  6.   <title>信源管理</title>  
  7.   <link rel="stylesheet"  
  8.    href="${pageContext.request.contextPath}/common/css/admin/style.css"  
  9.    type="text/css" />  
  10.   <script type="text/javascript"  
  11.    src="${pageContext.request.contextPath}/dwr/engine.js"></script>  
  12.   <script type="text/javascript"  
  13.    src="${pageContext.request.contextPath}/dwr/util.js"></script>  
  14.   <script type="text/javascript"  
  15.    src="${pageContext.request.contextPath}/dwr/interface/rssBuild.js"></script>  
  16.   <script type="text/javascript">  
  17.    var typeCode;  
  18.    function showBuild(title,code){  
  19.     //alert(title);  
  20.     typeCode = code;  
  21.     var doc = document.getElementById("buildOpml");  
  22.     document.getElementById("tableTitle").innerHTML=title;  
  23.     document.getElementById("opmlName").value = "";  
  24.     document.getElementById("nameMessage").innerHTML = "请以英文名称命名";  
  25.     document.getElementById("startBuild").value = "生成OPML";  
  26.     doc.style.display = "block";  
  27.    }  
  28.    function buildOpml(){  
  29.     owner = document.getElementById("opmlOwner").value;  
  30.     email = document.getElementById("opmlEmail").value;  
  31.     builder = document.getElementById("opmlBuilder").value;  
  32.     url = document.getElementById("opmlUrl").value;  
  33.     fileName = document.getElementById("opmlName").value;  
  34.     prefix = document.getElementById( s
    分享到:
    评论

相关推荐

    ReadWorld (RSS聚合新闻阅读器)

    欢迎使用ReadWorldRSS阅读器 1 这个程序更改了我上回发布的《聚合新闻(RSS)阅读器》的一些错误。 2 新增了频道列表的拖放功能,及导入,导出(OPML)功能。 3 重新设计了一下界面 4 本程序是仿照《新郎点点通》...

    Gregarius RSS聚合程序 0.6.1.zip

    Gregarius是国外一个RSS聚合程序,免费开源,具备良好的用户体验,易于操作和管理。可以把其当成RSS阅读器使用。 Gregarius是一个RSS/RDF/ATOM新闻聚合器支持OPML导入/导出,XHTML/CSS输出。 Gregarius包含一...

    xna.rar_RSS_XNA_atom_opml_聚合

    国内最好的开源PHP新闻聚合 1.支持RSS多核心切换,默认支持lastrss,simplepie,magpierss 2.支持 RDF,RSS,ATOM feeds 支持智能识别 3.基于浏览器Web端的前台浏览和后台管理,可在前台编辑,删除,锁定相关新闻 4.支持...

    RSS聚合器SismicsReader.zip

    Sismics Reader 是一个 Google ... 支持 RSS 和 Atom 支持分类组织,并跟踪喜好的文章 提供 Web 和移动接口 RESTful Web API 全文搜索 OPML 导入导出 皮肤自定义 Android 应用 标签:Sismics

    php-rss-feed:PHP平台的Feed订阅客户端

    声明原作者版本: : 汉化版本: : 下载GitHub: : 本站下载: : 界面特征C-LX RSS是另一个基于Web的单用户RSS阅读器。它带有OPML和CronJobs支持。要求必需组件PHP&gt; 5.5和具有PDO支持SQLite(或具有PDO支持MySQL)...

    Podget:一个简单的播客聚合器。-开源

    Podget 是一个简单的播客聚合器,针对作为预定的后台作业(即 cron)运行进行了优化,支持类别和文件夹、从 OPML 列表和 iTunes PCAST​​ 文件导入服务器、导出 OPML 文件、自动创建和清理播放列表。 2016 年 6 月 ...

    IXNA聚合程序 v0.5.rar

    国内最好的开源PHP新闻聚合 1.支持RSS多核心切换,默认支持simplepie,...6.支持导入和导出OPML 7.可显示favicon 8.具有多种主题样式,现有default,bxna两套主题 9.支持Rewrite启用 10.生成SiteMAP0.9 11.多语言包

    django-feedaggregator:一个 Django 1.8 应用程序,用于聚合 RSS 和 Atom 提要(行星)

    饲料聚合器一个 Django 1.8 应用程序,用于聚合 RSS 和 Atom 提要(行星)特征Python 2/3 兼容导入/导出 OPML 提要按供稿、作者或标签浏览帖子引导模板RSS 和 Atom 提要站点地图像 2004 年一样显示词云多个模板标签...

    提要:拉取网站提要并生成静态聚合器站点

    要使用它,请创建一个新的存储库,并添加opml文件名称为feeds.opml以及网站rss / atom feed的列表。 创建一个如下所示的github工作流以获取数据并将其放入内容分支 name: Schedule on: schedule: - cron: '*/5 * *...

    看天下网络资讯浏览器 v3.0 Build 0606 For Win98/Me

    国内功能最强大、内容最全面、用户群最大的RSS内容阅读和管理工具,从多个内容源聚合信息、即时更新、屏蔽垃圾广告、足不出户便知天下事新版v3.0增加了以下精彩的功能和服务:系统架构优化:使系统效率更高、速度更...

    看天下网络资讯浏览器 v3.0 Build 0814

    国内功能最强大、内容最全面、用户群最大的RSS内容阅读和管理工具,从多个内容源聚合信息、即时更新、屏蔽垃圾广告、足不出户便知天下事新版v3.0增加了以下精彩的功能和服务:系统架构优化:使系统效率更高、速度更...

    rsst:Rust中的RSS CLI着眼于简单性和互操作性

    用Rust编写的Atom / RSS阅读器。 这是一个个人项目,但是如果您对与可移植性相关的更改感兴趣,请告诉我。 一些基本问题 什么 命令行的准系统聚合器,强调可组合性。 为什么 我之所以喜欢该终端,有几个原因:应...

    feedpushr:一个简单的饲料聚合守护程序,顶部放糖

    简单的饲料聚合服务,上面放糖。 产品特点 具有嵌入式数据库的单个可执行文件。 管理订阅源订阅。 使用文件导入/导出订阅源。 积极且可调的聚合过程。 单独管理Feed聚合。 使用可插拔过滤器系统对商品进行修改...

    Feeder2:Feeder2.0,Android Rss阅读器,材质设计,MVP架构

    Feeder是一种RSS阅读器应用,可以将杂乱无序的信息聚合起来,进行高效阅读 Material Design的设计风格,界面,相互作用清爽简洁 应用内包含超过1,000,000条RSS源,可以利用搜索功能,方便地添加到自己的订阅列表中 ...

    podget:播客聚合器经过优化,可以在Linux上按计划的作业(即cron)运行

    它支持从RSS和ATOM XML提要中下载播客,将文件分类到文件夹和类别中,从iTunes PCAST​​文件和OPML列表中导入URL,自动创建M3U和ASX播放列表以及自动清除旧文件。 它还具有针对MS Windows服务器上托管的播客的自动...

    cartulary:基于Web的数字存档器

    它是一个RSS阅读器,RSS聚合器,可读性工具,文章存档器,微博,社交图管理器和阅读列表管理器。 您可以使用它将所有提要发布到一个社交大纲(OPML)中,以便其他人可以轻松地一次订阅您所有的提要。 您可以在网上...

    podStation播客的球员「podStation Podcast Player」-crx插件

    podStation是一个简单的RSS播客聚合器(或者我应该说一个podcatcher吗?)。 只需将您的供稿添加到主页中,或使用搜索工具即可感到高兴。 特点:*功能齐全的音频播放器,它在后台播放,并提供对播放速率(速度)的...

    podStation Podcast Player-crx插件

    podStation是一个简单的RSS播客聚合器(或者我应该说一个podcatcher吗?)。 只需将您的供稿添加到主页中,或使用搜索工具即可感到高兴。 功能:*全局媒体控制支持*功能齐全的音频播放器,它在后台播放,并提供对...

Global site tag (gtag.js) - Google Analytics