论坛首页 Java版 企业应用

ROME解析baidu RSS

浏览 998 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-08-14 关键字: RSS

#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
datetime.extra.masks=yyyy-MM-dd HH:mm:ss|yyyy-MM-dd HH:mm



这个是我在用 ROME时候,因为163和天极时间解析问题 而在ROME发布包里修改后可以的,因为ROME本身提供了这样的支持, 还有就是现在baidu解析上还有问题(在这里感谢下netbus )

如果哪位朋友知道 请指教......


在这里顺便介绍下ROME这个lib:


ROME是一个基于Java的开源程序包。ROME提供了一组Atom/RSS工具类,以使得用Java可以更方便和快捷的来操作大部分Syndication格式数据。目前最新版本为0.9,已经支持的格式包括:RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3 和 Atom 1.0。

ROME包含了一组解析器和生成器,以使得在程序中不仅能够方便的解析各种格式的数据,也可以方便的生成出所指定格式的数据。ROME的解析器和生成器是配合使用的,解析器在解析完源数据后,会生成一个ROME提供的中间对象(SyndFeed),这个对象包括了源数据中的所有信息,然后生成器以这个对象(SyndFeed)作为媒介,输出成程序所指定的数据格式。

使用ROME的解析器对读取一个Feed的操作是非常简单的,解析器可以从一个网址、一个本地文件或文件流中读取转换数据:

URL feedUrl = new URL("http://www.java.com/rss.xml");
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));


此时,就把http://www.java.com/rss.xml这个地址的Feed数据转换成了ROME的对象SyndFeed。要将这个SyndFeed重新转换生成为指定的Syndication格式数据,操作也是比较简单的:

Writer writer = new FileWriter("./test.xml");
feed.setFeedType(feedType); // 设定feed输出的格式
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
writer.close();

以上是演示了如何从一个存在的Feed地址里读取解析到再输出生成一个Feed的过程。实际上,在ROME里,还可以直接操作SyndFeed来构造Feed数据:

// 构造一个SyndFeed新对象
SyndFeed feed = new SyndFeedImpl();
// 设置Feed类型
feed.setFeedType(feedType);
// 设置Feed基本信息
feed.setTitle("测试Feed");
feed.setLink("http://www.thedevlog.com");
feed.setDescription("测试使用ROME来构造Feed数据");
// 构造Feed items列表
List entries = new ArrayList();
SyndEntry entry;
SyndContent description;
// 构造一个新的节点并添加到列表中
entry = new SyndEntryImpl();
entry.setTitle("ROME v1.0");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/Rome01");
entry.setPublishedDate(DATE_PARSER.parse("2004-06-08"));
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue("Initial release of ROME");
entry.setDescription(description);
entries.add(entry);
// 设置更多的节点...
// 将节点列表赋给feed对象
feed.setEntries(entries);
// 输出feed
Writer writer = new FileWriter("./test.xml");
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
writer.close();


整个过程是十分简单的。除了上述功能外,通过ROME还可以将两个或多个Feed合并为一个Feed,将一个Feed拆分为多个Feed等。

更多内容和使用方法,请参考ROME的官方资料:ROME,开发文档教程,API文档。
   
时间:2007-08-14
rome有些细节做得不是非常好 。

<width>120px</width>

rome 遇到这种情况 会抛出parsing exception。 他把120px转成int出错 还有很多这样的错误。 现在我们在转换前都需要先把 feed xml先filter一遍
   
0 请登录后投票
时间:2007-08-14
呵呵 这种错误我还没碰到过... 呵呵 不过LS的说了 以后碰到解决快了 哈哈 我在解吸baidu rss的时候得不到时间 自己也没怎么好好研究过
   
0 请登录后投票
时间:2007-12-19
你好 我也是使用rome生成rss文件
我想把生成的rss文件用xslt格式化下
怎么才能够在生成rss的时候就把要引用的xslt文件加入进去呢?
谢谢
   
0 请登录后投票
时间:2007-12-19
rome不是很灵活,有时候还是直接用dom来做。。。
   
0 请登录后投票
时间:2007-12-20
我尝试过用dom做
org.w3c.dom.Document doc=output.outputW3CDom(feed);
把feed对象转换为document
然后再加上声明
但是output.outputW3CDom(feed)得到的document总是null
不知道是什么原因
   
0 请登录后投票
时间:2008-01-11
为什么我解析出来的百度新闻没有时间呀?

 

   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
快速回复 引用上一条消息 (Alt+S)