Spotify api获取访问令牌/代码

时间:2017-03-08 14:07:51

标签: java spotify

所以我正在尝试使用这个库library 访问我的Spotify帐户,但我无法弄清楚我如何获得访问令牌,但我无法弄清楚如何从授权URL获取响应我托盘创建一个输入流访问该网址并打印输出响应,但我没有给出正确的输出我也托盘创建一个服务器与关闭接收响应,但我什么都没有,我从来没有使用过java服务器/网络那么多,所以我可能会犯一个错误.... / p>

public class privat {
    public privat() throws IOException {


        final String clientId = "clientId ";
        final String clientSecret = "clientSecret code ";
        final String redirectUri = "http://localhost:8888/callback";
        final Api api = Api.builder()
                .clientId(clientId)
                .clientSecret(clientSecret)
                .redirectURI(redirectUri)
                .build();

/* Set the necessary scopes that the application will need from the user */
        final List<String> scopes = Arrays.asList("user-read-private", "user-read-email");

/* Set a state. This is used to prevent cross site request forgeries. */
        final String state = "someExpectedStateString";

        String authorizeURL = api.createAuthorizeURL(scopes, state);
        System.out.println(authorizeURL);

/* Continue by sending the user to the authorizeURL, which will look something like
   https://accounts.spotify.com:443/authorize?client_id=5fe01282e44241328a84e7c5cc169165&response_type=code&redirect_uri=https://example.com/callback&scope=user-read-private%20user-read-email&state=some-state-of-my-choice
 */


/* Application details necessary to get an access token */
        final String code = "" ;/* where to find this ?? */



        /* Make a token request. Asynchronous requests are made with the .getAsync method and synchronous requests
 * are made with the .get method. This holds for all type of requests. */
        final SettableFuture<AuthorizationCodeCredentials> authorizationCodeCredentialsFuture = api.authorizationCodeGrant(code).build().getAsync();

/* Add callbacks to handle success and failure */
        Futures.addCallback(authorizationCodeCredentialsFuture, new FutureCallback<AuthorizationCodeCredentials>() {
            @Override
            public void onSuccess(AuthorizationCodeCredentials authorizationCodeCredentials) {
    /* The tokens were retrieved successfully! */
                System.out.println("Successfully retrieved an access token! " + authorizationCodeCredentials.getAccessToken());
                System.out.println("The access token expires in " + authorizationCodeCredentials.getExpiresIn() + " seconds");
                System.out.println("Luckily, I can refresh it using this refresh token! " +     authorizationCodeCredentials.getRefreshToken());

    /* Set the access token and refresh token so that they are used whenever needed */
                api.setAccessToken(authorizationCodeCredentials.getAccessToken());
                api.setRefreshToken(authorizationCodeCredentials.getRefreshToken());
            }

            @Override
            public void onFailure(Throwable throwable) {
    /* Let's say that the client id is invalid, or the code has been used more than once,
     * the request will fail. Why it fails is written in the throwable's message. */
                    System.out.println(throwable.getMessage());
                System.out.println(throwable.getStackTrace());
            }
        });
    }

}

1 个答案:

答案 0 :(得分:0)

用户授权您的应用后,code会作为您的回调网址的查询参数。您需要找到一种从那里抓取它的方法 - 您可以在localhost:8888上启动Web服务器以从那里获取代码 - 或者您可以指示用户从查询参数中复制代码重定向URI一旦被重定向。您可以找到有关授权程序的更多信息(看起来authorization codeimplicit grant流程适合您)on the Spotify Developer site