我正在练习制作一个网络应用程序,该应用程序会尝试读取用户的 Twitter 个人资料、显示他/她的 friend 并显示他/她的照片。 Twitter4j 网站上的代码示例如下:
public static void main(String args[]) thrwos Exception{
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
AccessToken accessToken = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (null == accessToken) {
System.out.println("Open the following URL
and grant access to your account:");
System.out.println(requestToken.getAuthorizationURL());
System.out.print("Hit enter when it's done.[Enter]:");
br.readLine();
try{
accessToken = requestToken.getAccessToken();
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
}else{
te.printStackTrace();
}
}
}
}
我做的是在一个 servlet 中,我们将其命名为 IndexServlet 我有以下代码:
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
RequestToken requestToken = twitter.getOAuthRequestToken();
String authUrl = requestToken.getAuthorizationURL()
然后我将 authUrl 传递给 jsp,以便用户可以单击它。那行得通 很远,但在那之后我已经被困住了! :)
我不太确定在哪里设置回调 URL。我应该将它设置为同一个 servlet 吗? 问题是我应该有相同的 twitter 和 requestToken 变量,就像第一个带有 main 方法的代码一样,所以我可以这样做:
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
但是将回调 url 设置为 IndexServlet 会调用设置 twitter 消费者的代码。我可能可以使用像
这样的标志绕过它if (already setup) {
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
}
但后来我觉得那很乱。
我试过的是(使用第二个 servlet,它是回调 url)
我尝试将 twitter 和 requestToken 变量存储在 session ,这样我就可以在 Twitter 重定向到回调 URL 时访问它,但显然这是不允许的。
我还尝试将 Twitter 和请求 token 都保存到数据存储区,但后者不允许存储 RequestToken 类型。
显然所有的都失败了。想知道这样做的正确方法。谢谢! :)
最佳答案
我想出了一个在谷歌应用引擎中使用 Twitter4j + Oauth 的技巧。我写了关于它的博客here .
尽管此代码有效,但它可能不是使用 Twitter4j 和 Oauth 的正确方法(尽管它在 appengine 上有效)。它没有经过优化,绝对不是最好的方法,而且为了简洁起见,它实际上充满了不好的做法!在我真正的应用程序中,虽然我已经重构了那些代码味道。
另一件事,我还没有解决的是为什么 Twitter 的图标在重定向到回调 url 后出现。我打算尽快解决这个问题并优化方法。非常欢迎提出意见和建议!
关于java - 在 appengine 中使用 twitter4j 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318840/