在Adobe AIR内开发GOOGLE阅读器客户端

本文来自:http://anirudhs.chaosnet.org/blog/2009.11.04.html

OOGLE阅读器没有官方的API。然而,Nial Kennedy和项目pyrfeed提供了很多分析文档。我在Readefine网络版使用的Python内开发了一个GOOGLE阅读器客户端。我需要利用同一个AS3代码库,为客户机版编写一个AS3GOOGLE阅读器客户端。因为是条件编译,我在一天内就完成了这个认为,并且确保了AIR 和 Flex版本使用同样的代码库。本文旨在说明GOOGLE阅读器的API和A3S执行,及它是如何与网络版结合起来的。

 

有意思的是,在snackr的代码里, 有读取GOOGLE阅读器的AS3代码。我还是编写了我自己的代码,因为我需要代码与我现有的Flex代码无缝结合。不管怎样,这就是使用GOOGLE阅读器,并且最小化Google Chrome后,Readefine Desktop的截图。

如需查看更多截图,浏览  Readefine Desktop

 

Google阅读器API

Google阅读器的构架非常出色。它在HTML和Javascript里的视图不依赖于获取和更新阅读器的实际方法。

 

API有三部分:验证,获取数据,更新数据。

 

先要仔细阅读本文的第一段提到的参考文章。关于API的信息强调了这一点。

验证

验证通过ClientLogin进行, GOOGLE对此进行了详细备份。你在设定服务为阅读器,输入用户名和密码时,要使用HTTP POST向URL添加信息。

 

在理想状态下,OAuth或AuthSub执行验证会有助于第三方应用程序,利用GOOGLE的阅读器,而无需要求用户向程序输入skynet密码。我们期盼GOOGLE会在不久的将来发布新的版本。

 

获取数据

GOOGLE阅读器的流程如下所示(在auth之后):

1)  通过询问/ api/0/user-info  获取用户信息;

2)  获取预定列表。如果用户已创建了文件夹,每个预定包含一个“category”。它还有一个域,称为 firstitemmsec ,以毫秒为单位,说明feed条目应该被提取的时间.

firstitemmsec 起初难倒了我, 直到我添加了一个新的预定。我注意到,GOOGLE阅读器的feed条目可回溯一个月之长(可能是无限期的)。因此,阅读器只能从你订阅的时间上判断,向你显示文章。

当你获取阅读列表或一个特定的feed时,ot是参数(毫秒/1000)。

3)  获取未读计数。总数与feed id user/userid_obtained_in_step1/state/com.google/reading-list相匹配。上限是1000,所以1000的话,也总是表示为1000+。

4)  获取阅读列表或特定feed,但要注意输入正确的ot。Feed中的每篇文章在被阅读,加星标或者标识为未读时,都有特定的域。

5)  为了获取下一批文章,向4中的call输入"cont" GET参数。

时不时的,你会要抓取未读计数,因为它根据你订阅的feeds的量而变化。

 

更新数据

标识为已读,星标,喜欢,共享等,都属于这一类。它比获取数据稍微复杂些,因为涉及到标志(token)。

这就是我的理解:

 

1)  发帖到/api/0/token ,获取标志。保存现有的时间戳(timestamp)。

 

2)  每个API调用要求标志排队,这样每次就只有一个未完成的调用。

 

3)  在进行更新API调用之前,检查您保存的时间戳,查看是否超过20分钟。如果是,获取一个新的标志,然后继续API调用。

 

AIR内的GOOGLE阅读器客户端

我有一个ServiceLocator singleton class(类),采用的方法如greaderGet(), greaderStar(), 等。根据编译变量,我调用AIR代码或Python服务器端代码。

因为我使用的是AsyncToken,我有GReaderCommand,这个类执行IResponder。 根据指令的result()方法,当resultFormat为HTTPService内的“对象”时,而你通常就会获取数据,也就是 对象

 

GReaderClient是AIR类,使用URLLoader与GOOGLE阅读器对话。它接收传递给HTTPService's send()的参数对象。每个方法都了解其GReaderCommand类型。然后,它为加载程序 (Loader) 创建一个请求图(用于获取参数),为指令创建一个urlloader图。

 

在向GOOGLE阅读器执行API调用之后,有一个共用的结果处理器,根据GReaderCommand的要求调度(marshal)反应。

marshallReaderResponse创建GReaderCommand的result()方法期待的对象,为对象或e4x。如果是对象,阅读器的反应为XML,我使用XMLDocument 及SimpleXMLDecoder。如果来自阅读器的反应在JSON内,我使用SONDecoder解析,并构建恰当的对象。

 

从XML创建一个对象:

marshall方法最终使用数据调用指令的result()方法。

 

下面是我的GReaderClient.as的完全源。如果没有GReaderCommand,就是不完整的,但是就开发Adobe AIR Google阅读器客户端来说,这个是很好的开端。

如需了解有关Readefine Desktop的更多信息,请登陆readefine.anirudhsasikumar.net。

 

CategoryAIR Comment(s) 

 

 

 

 

Flash Builder 4 正式版下载:http://g.csdn.net/5128184

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值