通过 OAuth 访问社会网络 Web 站点,第 1 部分: 构建支持 OAuth 的桌面 Twitter 客户端
2010-04-12 00:00:00 来源:WEB开发网Description:使用 OAuth 的桌面 Twitter 客户端
Application Website:在此处输入您的应用程序主页
Application Type:客户端 - 我们将要开发桌面客户端
Default Access type:读 & 写 - 我们想要授予用户写入权限
Use Twitter for login:否 - 我们不打算使用 Twitter 进行身份验证
注意,您应该将应用程序类型选择为 Client 而不是 Browser。(在本系列的第 2 部分,我将介绍基于 Web 的示例。)此外,切记授予读 & 写权限,否则您的应用程序将只能从 Twitter 读取内容。
注册成功后,您将获得一个使用者密钥、使用者机密(secret)和 3 个 URL(请求令牌 URL、访问令牌 URL 和授权 URL)。现在就可以开始实际使用了。
开发和测试 MyTtDesktopClient
我将使用 Twitter4J,它是 TwitterAPI 的一个开源 Java 库。Twitter4J 封装了许多函数,所以我们可以关注逻辑,无需接触 Twitter 的低级别 API 调用。Twitter4J 的另一个好处是它支持 OAuth,这将明显减少我们的开发工作。我们将从 清单 1 中的类 myttdesktopclient.OAuthTwitterClient 的 updateStatus(String status) 方法开始。 源代码可从下面的 下载 部分获得。不要忘记将使用者密钥和机密(记住,当注册客户端时,Twitter 会提供这些参数)放在 OAuthTwitterClient.java 的内部。
清单 1. 类 myttdesktopclient.OAuthTwitterClient 的 updateStatus(String status) 方法
public void updateStatus(String status) throws TwitterException, IOException {
Twitter twitter = new Twitter();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (accessToken == null) {
System.out.println("Open the following URL and grant access to
your account:");
System.out.println(requestToken.getAuthorizationURL());
// Copy the authorisation URL in your browser
// http://twitter.com/oauth/authorize?oauth_token=xxxxxxxxxxxxxxxxxxxxxxxx
// Log in Twitter, grant access
// Get a PIN returned, e.g., 738805
// Notice you can use HttpClient to do the job above
System.out.println("Copy the PIN displayed in your browser, then
hit ENTER: ");
String pin = br.readLine();
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
}
// Persist the access token for future reference
int userId = twitter.verifyCredentials().getId();
storeAccessToken(userId, accessToken);
Status twitterStatus = twitter.updateStatus(status);
System.out.println("Successfully updated the status for user with ID "
+ userId + " to [" + twitterStatus.getText() + "].");
}
更多精彩
赞助商链接