关于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.   //设置发布的OPML的标题
  25. root.put("title", type.getTitle());
  26. //设置OPML的发布时间
  27. root.put("pubDate", new Date().toString());
  28. //设置OPML的所有者
  29. root.put("owner", owner);
  30.   //设置OPML的发布者的EMail地址
  31. root.put("email", email);
  32. //设置OPML的创建人
  33. root.put("builder", builder);
  34. //设置OPML文件的连接地址,可以直接你网站的连接地址
  35. root.put("link", link);
  36.   //设置自己的创建Rss的连接地址
  37. root.put("buildPath", buildPath);
  38. root.put("typeList", typeList);
  39. // 设置到生成的文件名称
  40. String file = "";
  41.   //判断当前操作系统,如果是Windows系统的做就是反斜杠,如果是Linux系统就使用正斜杠
  42. Properties properties = System.getProperties();
  43. Object object = properties.get("os.name");
  44. // System.out.println("当前操作系统:" + String.valueOf(object));
  45. if ("Windows".equals(String.valueOf(object))) {
  46. file = path + "\\rss\\opml\\" + fileName + ".opml";
  47. } else {
  48. file = path + "//rss//opml//" + fileName + ".opml";
  49. }
  50. //设置要生成的文件
  51. Writer out = new OutputStreamWriter(new FileOutputStream(file),
  52. "utf-8");
  53. template.process(root, out);
  54.   //清理写入流
  55. out.flush();
  56. // 关闭流文件
  57. out.close();
  58. result = "buildSuccess";
  59. } else {
  60. result = "noChild";
  61. }
  62. } catch (Exception e) {
  63. result = "error";
  64. e.printStackTrace();
  65. }
  66. return result;
  67. }

  
上面方法中的参数是通过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(

关于RSS的聚合---OPML相关推荐

  1. 用ASP.NET编写一个在线RSS新闻聚合器

    概要 本文讲解了如何使用 XML Web 控件获取远程XML数据并在 ASP.NET 页面显示这些XML数据,以及使用Repeater控件发布数据库中的XML数据.在过去的几年间,随着 异构平台间共享 ...

  2. 用ASP.NET建立一个在线RSS新闻聚合器

    用ASP.NET建立一个在线RSS新闻聚合器 第1页:用ASP.NET建立一个在线RSS新闻聚合器 第2页:用ASP.NET建立一个在线RSS新闻聚合器 第3页:用ASP.NET建立一个在线RSS新闻 ...

  3. xslt 标签取集合第一条数据_用 Asp.Net 建立一个在线 RSS 新闻聚合器

    原代码下载:RSSAggregator.msi 原文出处:Creating an Online RSS News Aggregator with ASP.NET [b]概要 本文讲解了如何使用 XML ...

  4. 用ASP.NET建立一个在线RSS新闻聚合器(收藏)

    概要 本文讲解了如何使用 XML Web 控件获取远程XML数据并在 ASP.NET 页面显示这些XML数据,以及使用Repeater控件发布数据库中的XML数据.在过去的几年间,随着 异构平台间共享 ...

  5. 用ASP.NET建立一个在线RSS新闻聚合器(3)

    显示特定聚合摘要的新闻项 我们面临的下一个任务是创建 DisplayNewsItems.aspx 页面.这个页面会以链接的形式显示所选聚合摘要的新闻项标题,当点击标题时,新闻的内容就会显示在右下部分的 ...

  6. 在线rss阅读聚合器lilina-0.7安装笔记

    从http://prdownloads.sourceforge.net/lilina/lilina-0.7.tar.gz?download下载lilina最新版lilina-0.7.tar.gz,从h ...

  7. 两个网站:借物网,rss交流网站opml.cn

    lend.com.cn opml.cn 转载于:https://www.cnblogs.com/chenge/archive/2005/12/17/299281.html

  8. RSS(Really Simple Syndication)简易信息聚合

    简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议.RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广 ...

  9. RSS概念 以及 POTO周博通 资讯阅读器 使用入门

    RSS概念 ------- RSS是在线共享内容的一种简易方式(也叫聚合内容,Really Simple Syndication). 通常在时效性比较强的内容上使用RSS订阅能更快速获取信息, 网站提 ...

  10. RSS从入门到精通(转载)

    1.   令网络跳动的力量 1.1. RSS 最近在浏览许多新闻网站时,用户都会惊奇的发现一些写有"XML"字样的桔黄色图标频繁出现.如果使用普通浏览器的用户点击后只能看到一个写满 ...

最新文章

  1. Linux基础:调查和管理进程
  2. 合肥师范学院计算机毕设选老师,计算机毕设被导师要求反复修改?
  3. 【Groovy】字符串 ( 字符串注入函数 | asBoolean | execute | minus )
  4. php oop 实际工作,PHP OOP注意点(一)
  5. 针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom
  6. 6.过滤器(Filter)
  7. C#设计模式之21-策略模式
  8. Oracle修改实例名SID
  9. for语句的执行过程_深入学习MySQL 01 一条查询语句的执行过程
  10. mybatis generator 中文注释_[SpringBoot2.X] 23- 整合持久层技术 -MyBatis - 配置
  11. grep正则表达式后面的单引号和双引号的区别?
  12. linux c 端口复用,Linux C++ 网络编程学习系列(1)——端口复用实现
  13. 算机类学术论文 28个常见出版社一般写法(参考文献用)
  14. bugku reverse file writeup
  15. 你好!Docker【概念+源码+保姆式教程】
  16. 计算机控制器及其设计实现
  17. css3选择器详细探索
  18. Python采集某网站小视频内容, m3u8内容下载
  19. 全文检索技术Lucene入门和学习、与数据库数据结合的demo实现
  20. [Elasticsearch]cat API的使用

热门文章

  1. 计算机组成原理mips汇编大作业报告(冒泡排序、选择排序)
  2. 中国人在发表英文论文时汉字姓名究竟应该如何写?
  3. maven [INFO] No proxies configured [INFO] No proxy was configured, downloading directly
  4. 本学期关于Android学习的总结
  5. 管理者如何制定团队目标?读完这篇你就懂了.
  6. 分享我是如何找房东直租省中介费 租房 找房 直租 经验
  7. [读史思考]北宋历史上几个外行项目经理
  8. flutter 的像素尺寸
  9. anaconda r 语言_anaconda 配置R语言
  10. 计算机运算器由什么组成部分,运算器由哪些部分组成