在撰写本文时,夏季即将结束,新的学年就要开始,Twitter 的服务器上不 断涌现出世界各地的网虫和非网虫们发布的更新。对于我们很多身在北美的人来 说,从海滩聚会到足球,从室外娱乐到室内项目,各种各样的想法纷至沓来。为 了跟上这种形势,是时候重访 Scitter 这个用于访问 Twitter 的 Scala 客户 机库了。
如果 到目前为止 您一直紧随 Scitter 的开发,就会知道,这个库现在能够 利用各种不同的 Twitter API 查看用户的好友、追随者和时间线,以及其他内 容。但是,这个库还不具备发布状态更新的能力。在这最后一篇关于 Scitter 的文章中,我们将丰富这个库的功能,增加一些有趣的内容(终止和评价)功能 和重要方法 update()、show() 和 destroy()。在此过程中,您将了解更多关于 Twitter API 的知识,它与 Scala 之间的交互如何,您还将了解如何克服两者 之间不可避免的编程挑战。
注意,当您看到本文的时候,Scitter 库将位于一个 公共源代码控制库 中 。当然,我还将在本文中包括 源代码,但是要知道,源代码库可能发生改变。 换句话说,项目库中的代码与您在这里看到的代码可能略有不同,或者有较大的 不同。
POST 到 Twitter
到目前为止,我们的 Scitter 开发主要集中于一些基于 HTTP GET 的操作, 这主要是因为这些调用非常容易,而我想轻松切入 Twitter API。将 POST 和 DELETE 操作添加到库中对于可见性来说迈出了重要一步。到目前为止,可以在 个人 Twitter 帐户上运行单元测试,而其他人并不知道您要干什么。但是,一 旦开始发送更新消息,那么全世界都将知道您要运行 Scitter 单元测试。
如果继续测试 Scitter,那么需要在 Twitter 上创建自己的 “测试” 帐户 。(也许用 Twitter API 编程的最大缺点是没有任何合适的测试或模拟工具。 )
目前的进展
在开始着手这个库的新的 UPDATE 功能之前,我们来回顾一下到目前为止我 们已经创建的东西。
大致来说,Scitter 库分为 4 个部分:
来回发送的请求和响应类型(User、Status 等),包含在 API 中;它们被 建模为 case 类。
OptionalParam 类型,同样在 API 中的某些地方;也被建模为 case 类,这 些 case 类继承基本的 OptionalParam 类型。
Scitter 对象,用于通信基础和对 Twitter 的匿名(无身份验证)访问。
Scitter 类,存放一个用户名和密码,用于访问给定 Twitter 帐户时进行验 证。
注意,在这最后一篇文章中,为了使文件大小保持在相对合理的范围内,我 将请求/响应类型分开放到不同的文件中。
终止和评价
那么,现在我们清楚了目标。我们将通过实现两个 “只读” Twitter API 来达到目标:end_session API(结束用户会话)和 rate_limit_status API( 描述在某一特定时段内用户帐户还剩下多少可用的 post)。
end_session API 与它的同胞 verify_credentials 相似,也是一个非常简 单的 API:只需用一个经过验证的请求调用它,它将 “结束” 当前正在运行的 会话。在 Scitter 类上实现它非常容易,如清单 1 所示:
清单 1. 在 Scitter 上实现 end_session
package com.tedneward.scitter
{
import org.apache.commons.httpclient._, auth._, methods._, params._
import scala.xml._
// ...
class Scitter
{
/**
*
*/
def endSession : Boolean =
{
val (statusCode, statusBody) =
Scitter.execute ("http://twitter.com/account/end_session.xml",
username, password)
statusCode == 200
}
}
}
好吧,我失言了。也不是那么容易。