[译文]了解用于读取RSS和Atom新闻推送的JavaFX API(一)
RSS API概况
RSS(资源描述框架站点摘要(Resource Description Framework Site Summary)、真正简单的整合(Really Simple Syndication)、丰富站点汇总(Rich Site Summary))API由位于javafx.data.feed.rss包中的10个类组成,包的核心是RssTask类。
API支持的RSS版本
|
RSS API处理符合0.91(包括了非可选的项目元素)到2.0.11(撰写本文时的最新版本)版本的RSS规范的新闻推送
|
RssTask这一入口点类扩展了FeedTask,并提供了以下的变量来安装自定义的工厂,报告新闻推送的channel元素的非item内容,以及报告channel元素的每个item元素的内容:
Factory(类型为Factory)标识了被用来创建代表新闻推送元素的对象的工厂,在创建自定的推送解析器的时候,只需要安装自己的工厂就可以了。
onChannel(类型为function(:Channel):Void)标识了被调用来报告channel元素的非item元素的函数,RSS channel元素包含了item和非item元素,其本身被包含在顶层的rss元素中,该变量的缺省值为null。
onItem(类型为function(:Item):Void)标识了被调用来报告当前的item元素的函数,该变量的缺省值为null。
类Channel扩展了代表了顶层rss元素的抽象类RSS,该抽象类提供了一些成员,这些成员被用来访问创建对象的工厂,以及访问解析新闻推送的任务等。相应地,RSS扩展了Base。
Channel还提供了以下变量用于访问面向channel(非item特有)的内容:
categories(类型为Category[])标识了该channel所属的类别(以domain属性和文本值作为描述)。
copyright(类型为String)指定channel内容的版权声明。
description(类型为String)给出描述这一channel的短语或句子。
doc(类型为String)指定了指向格式文档的URL,这些格式被用在RSS文件中。这有可能仅是一个指向Web页面的指针,不过有助于今后遇到该RSS文件的人理解这一文件的目的(很像是代码注释)。
generator(类型为String)标识了被用来生成该channel的程序。
image(类型为Image)标识了与channel内容一起显示的图像(以description、height、link、title、URL以及width等属性来描述)
language(类型为String)标识了编写channel所使用的语言。
lastBuildDate(类型为javafx.date.DateTime)指明了channel的最后修改时间是何时。
link(类型为String)提供与此channel对应的网站的URL。
pubDate(类型为DateTime)标识了该channel发布的日期。
title(类型为String)提供该channel的标题。
ttl(类型为Duration)提供了在新闻阅读器必须轮询新闻推送以刷新channel内容之前,其可以缓存该channel的分钟数。
不支持的channel元素
|
出于某种原因,RSS API不支持channel元素的cloud、textInput、skipHours和skipDays元素,RSS类中并没有代表这些元素的javafx.data.xml.QName常量,并且在Channel类中也没有代表他们的变量。
|
与Channel一样,描述channel的某个item元素的Item类也扩展了RSS,它提供了以下的变量:
author(类型为String)提供了该item作者的email地址。
categories(类型为Category[])标识了该item所属的类别。
comments(类型为String)指定了包含该item有关评论的网页的URL。
description(类型为String)提供了该item的描述。
enclosure(类型为Enclosure)描述了附在该item上的某个媒体对象(以length、MIME类型和URL属性来描述)。
guid(类型为Guid)为该item指定了一个全局唯一标识(以text属性以及一个标识来描述,该标识用来判断这一text是否永久指向该item描述的整个项目)。
link(类型为String)提供了该item的URL。
pubDate(类型为DateTime)标识了该item发布的日期。
source(类型为Source)标识了该item所来自的channel(以channel的名称和channel的XMLization来描述)。
title(类型为String)提供了该item的标题。
我创建了一个NetBeans的RSSDemo工程,其中的Main.fx源代码以RssTask的interval、location、onStart、onChannel、onItem、onException、onForeignEvent以及onDone等变量来对它进行了说明。
/*
* Main.fx
*/
package rssdemo;
import java.lang.Exception;
import javafx.data.feed.rss.Channel;
import javafx.data.feed.rss.Item;
import javafx.data.feed.rss.RssTask;
import javafx.data.pull.Event;
def MAX_POLLS = 3;
var counter = 0;
def task:RssTask = RssTask
{
interval: 15s
//下面的location说明了一个基本的RSS新闻推送
location: "http://javajeff.mb.ca/rss/javajeff.xml"
//下面的location说明了onException().
// location: "http://developers.sun.com/rss/sdn_features.xml"
//下面的location说明了onForeignEvent().
// location: "http://feeds.dzone.com/javalobby/frontpage?format=xml"
//下面的location说明了IllegalArgumentException (必须使用
// AtomTask来获取Atom推送).
// location: "http://feeds.sophos.com/en/atom1_0-sophos-company-news.xml"
onStart: function (): Void
{
println ("Task is starting");
if (++counter > MAX_POLLS)
{
task.stop ();
FX.exit ()
}
}
onChannel: function (c: Channel): Void
{
println ("Channel: {c}")
}
onItem: function (i: Item): Void
{
println ("Item: {i}")
}
onException: function (e: Exception): Void
{
println ("Exception: {e}");
task.stop ();
FX.exit ()
}
onForeignEvent: function (e: Event): Void
{
println ("Event: {e}")
}
onDone: function (): Void
{
println ("Completed poll #{counter}")
}
}
task.start ()
|
源代码引入了一个常量用来指明轮询新闻推送的最大次数,以及一个统计到目前为止已经进行了轮询次数的变量,该做法是为了限制轮询新闻推送的次数,这样应用就不至于无限期地运行下去。
在调用了RssTask实例的start()函数之后,该函数启动新闻推送轮询操作,每十五秒钟轮询一次赋值给location的新闻推送地址。在每次轮询开始的时候,onStart()回调函数被调用。
该回调函数检查计数器,看其是否已经超过轮询的数量上限,如果是的话,调用stop()来停止轮询,并调用FX.exit()来杀掉与RssTask实例相关的后台线程,允许应用程序退出。
或许你想知道为什么我把if (++counter > MAX_POLLS)语句放在onStart(),而不是onDone回调函数中,我这样做是因为onDone()并不总是在每次轮询终止时调用。(你在本文后面会发现为什么这种情况会发生)。
在读取或者解析新闻推送时,结果可能会是抛出一个异常,如果这种情况发生的话,onException()回调函数调用stop()来停止轮询任务,然后调用FX.exit()来杀掉后台线程并终止应用程序。
这个简单的框架可作为研究RSS API的一个起点,作为一个练习,扩充onChannel()和onItem()来输出他们的Channel和Item参数的各个变量的值。
[译文]了解用于读取RSS和Atom新闻推送的JavaFX API(三)
分享到:
相关推荐
JavaFX API文档。Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich ...
JavaFX api文档 chm格式
JavaFX API Documentation
JAVA 8 官网API ,JavaFX 2.0 API官网 整合 生成CHM文件。
用于JavaFX学习的帮助文档JavaFX api,
JavaFX 包含了一些列图形和媒体包,允许程序员设计、创建、测试、调试、和部署富客户端应用并且保持跨平台的操作一致性。 JavaFX 应用程序由 Java API 编写,可以调用任何 Java API 包。例如,可以调用 Java API ...
javafx8api文档
JavaFx api帮助文档
javafx2.2 API文档 英文文档 希望对你有所帮助
javafx的最新发布版本的最新API文档,包含目前新增所有包的信息!希望支持java!
javafx 2.2的 api,chm版本的,英文版的
JavaFX2 API chm文件
Javafx 2.0 正式版本的api手册,方便使用。
进行javafx开发时使用的api工具书。方便随时查询。
javaFxAPI(PDF版)根据官方资料制作
javafx-8_0_0-apidocs,该文档下载自官网,经本人制作而成方便使用的chm格式,我的更多下载资源:http://download.csdn.net/user/xubingtao。
最新JavaFX 2.2官方原版API documentation,解压缩后直接可以使用
javafx2.0的官方文档制作而成,包含索引
javafx api 帮助文档chm格式英文版 挑战英语迟早也得过这关