2010-03-02 34 views

回答

1

我开始用foursquare4j,但无法得到它成功地检索访问令牌,这是呼吁签署调用Foursquare的API之前所需的最后一步。 因此,我切换到使用signpost来通过认证位,并获得访问令牌和秘密,然后使用foursquare4j,因为它封装了API作为一个非常好的对象模型。 我不知道路标或foursquare4j本质上是线程安全的 - 你可以在他们的论坛中提出这个问题。 下面是我用于验证我的应用程序的代码的扁平版本。 我正在使用Play框架 - authorize()接收初始认证请求,而oauth()是用户一旦允许访问,foursquare重定向到的地方。

public class Foursquare extends Controller { 

    static final String FOURSQUARE_OAUTH_REQUEST_TOKEN = "http://foursquare.com/oauth/request_token"; 
    static final String FOURSQUARE_OAUTH_ACCESS_TOKEN = "http://foursquare.com/oauth/access_token"; 
    static final String FOURSQUARE_OAUTH_AUTHORIZE = "http://foursquare.com/oauth/authorize"; 
    static final String CONSUMER_KEY = "N4FKW2GFLMU1UGR3DDQYE4IGJQRGID1JFXYPJS3XFLZN3EU6"; 
    static final String CONSUMER_SECRET = "DDGHBF25J3RJDD4N4QC2CMRF8YMA1CG94OGFRPTY4RQNLMVH"; 


    // Handle Request for foursquare Authorization 
    public static void authorize() throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { 

     oauth.signpost.OAuthProvider provider = new DefaultOAuthProvider(FOURSQUARE_OAUTH_REQUEST_TOKEN, FOURSQUARE_OAUTH_ACCESS_TOKEN,FOURSQUARE_OAUTH_AUTHORIZE); 
     oauth.signpost.OAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET); 
     String authURL; 

     authURL = provider.retrieveRequestToken(consumer,""); 

     String tokenSecret = consumer.getTokenSecret(); 
     session.put("secret", tokenSecret); 
     redirect(authURL); 
    } 

    // Handle call back from foursquare after user Accepts 
    public static void oauth() throws IOException, OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { 

     oauth.signpost.OAuthProvider provider = new DefaultOAuthProvider(FOURSQUARE_OAUTH_REQUEST_TOKEN, FOURSQUARE_OAUTH_ACCESS_TOKEN,FOURSQUARE_OAUTH_AUTHORIZE); 
     oauth.signpost.OAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET); 
     String secret = session.get("secret"); 
     String pinCode = params.get("oauth_token"); 
     consumer.setTokenWithSecret(pinCode, secret); 
     provider.retrieveAccessToken(consumer, pinCode); 

     // Get the access token and secret 
     String token = consumer.getToken(); 
     String tokenSecret = consumer.getTokenSecret(); 

     // Set foursquare4j Credentials 
     foursquare4j.type.Credentials credentials = new Credentials(); 
     credentials.setTokenSecret(tokenSecret); 
     credentials.setAccessToken(token); 

     foursquare4j.oauth.OAuthConsumer newConsumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 

     foursquare4j.oauth.FoursquareOAuthImpl fs = new FoursquareOAuthImpl(newConsumer, credentials); 

     try { 
      // Get last 50 checkins 
      Checkins checkins = fs.history("50", ""); 

      render(checkins); 
     } catch (FoursquareException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

我在DefaultOAuthProvider和DefaultOAuthConsumer的构造函数的参数中发现了一些变化? – 2011-06-24 12:00:45