0

有没有人为四方 oauth 使用任何好的 Java API?我正在寻找线程安全的东西?

干杯,

4

2 回答 2

1

我从使用foursquare4j开始,但无法让它成功检索访问令牌,这是调用 Foursquare API 的签名调用之前所需的最后一步。所以我改用signpost来通过身份验证位并获取访问令牌和秘密,然后使用foursquare4j,因为它将API封装为一个非常好的对象模型。我不知道 signpost 或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();
        }
    }
}
于 2010-07-16T08:03:30.943 回答
0

嗨,安德鲁,我几乎完成了为超酷的 Play Framework 设置一个模块,以通过 OAuth 与 Foursquare 对话。

您可以在我的博客http://geeks.aretotally.in或 Github https://github.com/feliperazeek/playframework-foursquare上关注进度。

请注意,因为 Foursquare 很快就会关闭 OAuth 1 以支持 OAuth 2。

于 2011-03-09T23:30:06.190 回答