1 、 OPML 文件
OPML ( Outline Processor Markup Language )是建立在 XML 基础上的“大纲处理标记语言”,主要用于描述一份资料的结构。大部分的 RSS 阅读器都支持通过导入 OPML 文件来导入或导出订阅的源。
下面是一个 OPML 文件的样本
<?xml version="1.0" encoding="UTF-8"?> <opml version="1.0"> <head> <title> subscriptions in Google Reader</title> </head> <body> <outline text="豆瓣: 搞笑新闻收集小组的讨论" title="豆瓣: 搞笑新闻收集小组的讨论" type="rss" xmlUrl="http://www.douban.com/feed/group/funnynews/discussion" htmlUrl="http://www.douban.com/group/funnynews/discussion"/> <outline title="category1" text="category"> <outline text="xxxxx" title="xxxxx" type="rss" xmlUrl="http://www.xxxxx.net/index.xml" htmlUrl="http://www.xxxxx.net/"/> <outline text="yyyyy" title="yyyyy" type="rss" xmlUrl="http://yyyyy.yyyyy.com/rss" htmlUrl="http://yyyyy.yyyyy.com"/> </outline> </body> </opml>
2 、用 ROME 解悉 OPML 文件
ROME 有一个 opml 的扩展包,大致看了一下, jar 包里面有一个 rome.properties 文件和一些处理 OPML 格式文件的解悉和转换类。应该是通过 ROME 的插件机制,通过在 rome.properties 里面增加这些用来处理 OPML 格式的 Parser 和 Convertor 类,使 ROME 具备了解悉 OPML 的能力。使用时和用 ROME 读取 RSS 没有多在区别,如下:
WireFeedInput input = new WireFeedInput();
Opml feed = (Opml) input.build(source);//source可以是Reader,InputStream,和File等,
List<Outline> outlines = (List<Outline>) feed.getOutlines();
这样这可以通过 Outline 来取得 OPML 文件中每一条“ Rss 订阅”的地址和 title 等信息。同时要注意这里 Outline 既可以表示一条 Rss 订况,也可能表示一个 category, 如 <outline title="category1" text="category"> 这一条,这个其实就是在 Google Reader 中的 Folder 的概念。
可能过 outline.getChildren() 来取得 category 下面的每一个条目。
3、“快速搬家”
有些RSS阅读器提供了快速搬家,通过输入你在其它阅读器上的用户名和密码,就可以将以RSS订阅从其它网站上导入到这个阅读器上。在 java 中,用 HttpClient 通过将用户名和密码传递给其它阅读器网站模拟登陆,然后利用网站提供的导出OPML文件功能,再将这个OPML文件导入即可实现类似的快速搬家功能。