我正在练习制作一个网络应用程序,试图阅读用户的推特个人资料,显示他/她的朋友并显示他/她的照片。 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,以便用户可以单击它。这是有效的 远在那之后我已经卡住了! :)
我不确定在哪里设置回调网址。我应该将它设置为相同的servlet吗? 问题是我应该使用相同的twitter和requestToken变量,就像使用main方法的第一个代码一样,所以我可以这样做:
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
但是将回调网址设置为IndexServlet会调用设置twitter使用者的代码。我可以使用像
这样的标志绕过它if (already setup) {
accessToken = requestToken.getAccessToken();
Status status = twitter.updateStatus(some argument here);
}
然后我认为这很麻烦。
我尝试的是(使用第二个servlet,它是回调网址)
我尝试将twitter和requestToken变量存储在 会话,所以我可以在twitter重定向到回调网址时访问它,但显然不允许这样做。
我也尝试将twitter和请求令牌保存到数据存储区,但后者不允许存储RequestToken类型。
答案 0 :(得分:2)
我在谷歌应用引擎中使用了Twitter4j + Oauth。我在博客上写了here。
尽管此代码有效,但它可能不是使用Twitter4j和Oauth的正确方法(尽管它确实适用于appengine)。它没有经过优化,它绝对不是最好的方式,为了简洁起见,它实际上充斥着不良做法!在我的真实应用程序中虽然我已经重构了那些代码气味。
另一件事,我还没有解决为什么Twitter的图标在重定向到回调网址后显示的原因。我打算尽快开展这项工作并优化方法。欢迎提出意见和建议!
答案 1 :(得分:1)
您可以将数据存储在session中。 Google App Engine支持此功能,但you need to enable it。