通过 OAuth 访问社会网络 Web 站点,第 2 部分: 构建支持 OAuth 的 Web Twitter 客户端
2010-05-21 00:00:00 来源:WEB开发网查看原图(大图)
doPost(...) 方法的其他内容如 清单 2 所示。此部分代码响应 图 3 显示的 3 个按钮和用户上次更新末部的删除链接。有了这 3 个按钮和 1 个删除链接,用户可以删除其上一次更新,更新其状态并查看好友的时间轴。可对此应用程序应用 Ajax (例如,使用 GWT)以改进代码,从而改善用户体验。我将此作为您的家庭作业。图 4 显示了成功进行状态更新之后的屏幕截图。
清单 2. myttwebclient.MyTwitterServlet 支持的操作
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
// OAuth authentication support
......
} else if (ACTION_UPDATE.equals(action)) {
logger.debug("Updating Twitter status...");
String status = request.getParameter(PARAM_STATUS);
Twitter twitter = (Twitter) session.getAttribute(ATTR_TWITTER);
try {
Status twitterStatus = twitter.updateStatus(status);
logger.debug("Successfully updated the status to ["
+ twitterStatus.getText() + "].");
// Update last status
session.setAttribute(ATTR_LAST_UPDATED_STATUS, twitterStatus
.getText()
+ " " + twitterStatus.getCreatedAt());
session.setAttribute(ATTR_LAST_UPDATED_STATUS_ID, ""
+ twitterStatus.getId());
// Update friends' timelines
getFriendsTimelinesAndStoreInSession(session, true);
// Stay in the update status page
logger.debug("Staying in the status update page...");
request.getRequestDispatcher(PAGE_UPDATE_STATUS).forward(
request, response);
} catch (TwitterException e) {
logger.error("Failed to update Twitter status - "
+ e.getMessage());
throw new ServletException(e);
}
} else if (ACTION_DELETE.equals(action)) {
logger.debug("Deleting Twitter status...");
String strId = (String) session
.getAttribute(ATTR_LAST_UPDATED_STATUS_ID);
if (strId != null && strId != "") {
Twitter twitter = (Twitter) session.getAttribute(ATTR_TWITTER);
try {
int id = twitter.verifyCredentials().getId();
twitter.destroyStatus(Long.parseLong(strId));
session.removeAttribute(ATTR_LAST_UPDATED_STATUS);
session.removeAttribute(ATTR_LAST_UPDATED_STATUS_ID);
logger.debug("Last update deleted for Twitter user " + id
+ " deleted, session record removed");
// Get last status and friends' timelines
getMyLastStatusAndStoreInSession(session);
getFriendsTimelinesAndStoreInSession(session, true);
} catch (TwitterException e) {
logger.error("Failed to delete Twitter status - "
+ e.getMessage());
throw new ServletException(e);
}
}
// Stay in the update status page
logger.debug("Staying in the status update page...");
request.getRequestDispatcher(PAGE_UPDATE_STATUS).forward(request,
response);
} else if (ACTION_MORE.equals(action)) {
// Update friends' timelines
getFriendsTimelinesAndStoreInSession(session);
// Stay in the update status page
logger.debug("Staying in the status update page...");
request.getRequestDispatcher(PAGE_UPDATE_STATUS).forward(request,
response);
} else if (ACTION_LATEST.equals(action)) {
// Update friends' latest timelines
getFriendsTimelinesAndStoreInSession(session, true);
// Stay in the update status page
logger.debug("Staying in the status update page...");
request.getRequestDispatcher(PAGE_UPDATE_STATUS).forward(request,
response);
}
}
图 4. MyTtWebClient 更新的 Twitter 状态
查看原图(大图)
我假设现在您已完全了解 MyTtWebClient。如果您想将其部署到 Web 服务器,可能就不再需要回调支持。要禁用回调支持,只需将 WEB-INF/web.xml 中的参数 callbackUrl 设置为一个空字符串即可。但是,记住,您必须为 Twitter 设置正确的回调 URL,以便在成功进行了 OAuth 身份验证后,Twitter 知道应该将用户重定向到哪里。
在您的 Web 应用程序投入使用之前,您可能会意识到应用于 API 调用的 Twitter 限制。例如,REST API 调用的默认速率限制为每小时 150 个请求。幸运的是,Twitter 允许您应用每小时 20,000 个请求。更多信息,请参见 Twitter FAQ。
结束语
在本系列的第 2 部分中,我介绍了如何开发 Twitter Web 客户端 MyTtWebClient。该 Web 应用程序演示了 OAuth 如何与 Web 浏览器进行无缝协作。与 MyTtDesktopClient 相比,我还为 MyTtWebClient 添加了更多功能,包括删除上一次更新和显示好友的时间轴。在第 3 部分,我将演示如何将此 Web Twitter 客户端迁移到 Google App Engine 中。
本文示例源代码或素材下载
更多精彩
赞助商链接