在appengine中使用twitter4j的正确方法

时间:2009-08-23 15:42:05

标签: java google-app-engine twitter

我正在练习制作一个网络应用程序,试图阅读用户的推特个人资料,显示他/她的朋友并显示他/她的照片。 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,它是回调网址)

  1. 我尝试将twitter和requestToken变量存储在 会话,所以我可以在twitter重定向到回调网址时访问它,但显然不允许这样做。

  2. 我也尝试将twitter和请求令牌保存到数据存储区,但后者不允许存储RequestToken类型。

  3. 显然所有人都失败了。想知道正确的方法来做到这一点。谢谢! :)

2 个答案:

答案 0 :(得分:2)

我在谷歌应用引擎中使用了Twitter4j + Oauth。我在博客上写了here

尽管此代码有效,但它可能不是使用Twitter4j和Oauth的正确方法(尽管它确实适用于appengine)。它没有经过优化,它绝对不是最好的方式,为了简洁起见,它实际上充斥着不良做法!在我的真实应用程序中虽然我已经重构了那些代码气味。

另一件事,我还没有解决为什么Twitter的图标在重定向到回调网址后显示的原因。我打算尽快开展这项工作并优化方法。欢迎提出意见和建议!

答案 1 :(得分:1)

您可以将数据存储在session中。 Google App Engine支持此功能,但you need to enable it