2016-11-12 2 views
1

私はプロジェクトに取り組んでいます。私はspotifyでログインしたユーザーのプレイリストのリストを取得したいと思います。現在私はログオンしてユーザー情報を見ることができます(spotifyのデモに従ってください)。今、私はログインしているユーザーのプレイリストを取得したいと思います。spotify web apiを使ってプレイリストのリストをユーザーごとに取得するにはどうすればよいですか?

これは私が持っているコードです:

/** 
* This is an example of a basic node.js script that performs 
* the Authorization Code oAuth2 flow to authenticate against 
* the Spotify Accounts. 
* 
* For more information, read 
* https://developer.spotify.com/web-api/authorization-guide/#authorization_code_flow 
*/ 

var express = require('express'); // Express web server framework 
var request = require('request'); // "Request" library 
var querystring = require('querystring'); 
var cookieParser = require('cookie-parser'); 

var client_id = '2e54c888b964418588d8c274d2b9dd5e'; // Your client id 
var client_secret = 'c7b15e90a3cb4891b3dbcd79ed8bcfa0'; // Your secret 
var redirect_uri = 'http://localhost:8888/callback'; // Your redirect uri 

/** 
* Generates a random string containing numbers and letters 
* @param {number} length The length of the string 
* @return {string} The generated string 
*/ 
var generateRandomString = function(length) { 
    var text = ''; 
    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 

    for (var i = 0; i < length; i++) { 
    text += possible.charAt(Math.floor(Math.random() * possible.length)); 
    } 
    return text; 
}; 

var stateKey = 'spotify_auth_state'; 

var app = express(); 

app.use(express.static(__dirname + '/public')) 
    .use(cookieParser()); 

app.get('/login', function(req, res) { 
    var state = generateRandomString(16); 
    res.cookie(stateKey, state); 

    // your application requests authorization 
    var scope = 'user-read-private user-read-email'; 
    res.redirect('https://accounts.spotify.com/authorize?' + 
     querystring.stringify({ 
     response_type: 'code', 
     client_id: client_id, 
     scope: scope, 
     redirect_uri: redirect_uri, 
     state: state 
     })); 
}); 

app.get('/playlists', function(req, res) { 
    // your application requests authorization 
    var scope = 'playlist-read-private'; 
    res.redirect('https://api.spotify.com/v1/me/playlists'); 
}); 

app.get('/callback', function(req, res) { 

    // your application requests refresh and access tokens 
    // after checking the state parameter 

    var code = req.query.code || null; 
    var state = req.query.state || null; 
    var storedState = req.cookies ? req.cookies[stateKey] : null; 

    if (state === null || state !== storedState) { 
    res.redirect('/#' + 
     querystring.stringify({ 
     error: 'state_mismatch' 
     })); 
    } else { 
    res.clearCookie(stateKey); 
    var authOptions = { 
     url: 'https://accounts.spotify.com/api/token', 
     form: { 
     code: code, 
     redirect_uri: redirect_uri, 
     grant_type: 'authorization_code' 
     }, 
     headers: { 
     'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64')) 
     }, 
     json: true 
    }; 

    request.post(authOptions, function(error, response, body) { 
     if (!error && response.statusCode === 200) { 

     var access_token = body.access_token, 
      refresh_token = body.refresh_token; 

     var options = { 
      url: 'https://api.spotify.com/v1/me', 
      headers: { 'Authorization': 'Bearer ' + access_token }, 
      json: true 
     }; 

     // use the access token to access the Spotify Web API 
     request.get(options, function(error, response, body) { 
      console.log(body); 
     }); 

     // we can also pass the token to the browser to make requests from there 
     res.redirect('/#' + 
      querystring.stringify({ 
      access_token: access_token, 
      refresh_token: refresh_token 
      })); 
     } else { 
     res.redirect('/#' + 
      querystring.stringify({ 
      error: 'invalid_token' 
      })); 
     } 
    }); 
    } 
}); 

app.get('/refresh_token', function(req, res) { 

    // requesting access token from refresh token 
    var refresh_token = req.query.refresh_token; 
    var authOptions = { 
    url: 'https://accounts.spotify.com/api/token', 
    headers: { 'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64')) }, 
    form: { 
     grant_type: 'refresh_token', 
     refresh_token: refresh_token 
    }, 
    json: true 
    }; 

    request.post(authOptions, function(error, response, body) { 
    if (!error && response.statusCode === 200) { 
     var access_token = body.access_token; 
     res.send({ 
     'access_token': access_token 
     }); 
    } 
    }); 
}); 

console.log('Listening on 8888'); 
app.listen(8888); 

とライン:

app.get('/playlists', function(req, res) { 
    // your application requests authorization 
    var scope = 'playlist-read-private'; 
    res.redirect('https://api.spotify.com/v1/me/playlists'); 
}); 

は、私は自分自身を書いたものですが、私は、私はそれを動作させることができる方法を知りません。

答えて

2

Spotify API playlistsエンドポイントrequires authentication token

非常に原始的な例として、これらのラインにあなたはAuth Tokenを取得することができます:

その後
// use the access token to access the Spotify Web API 
    request.get(options, function(error, response, body) { 
     console.log(body); 
     token = access_token; 
    }); 

、プレイリストを取得するためのコード:

var token = '';                                                       

app.get('/playlists', function(req, res) { 
    var state = generateRandomString(16); 
    res.cookie(stateKey, state); 
    // your application requests authorization 
    var scope = 'playlist-read-private'; 
    res.redirect('https://api.spotify.com/v1/me/playlists?' + 
    querystring.stringify({ 
     access_token: token, 
     token_type: 'Bearer', 
     response_type: 'code', 
     client_id: client_id, 
     scope: scope, 
     redirect_uri: redirect_uri, 
     state: state 
    })); 
}); 

まず、あなたは真偽のために ` 'http://localhost:8888/loginを訪問し、その後、プレイリストの場合は「http://localhost:8888/playlists」になります。

+0

私のコードよりもうまく見えますが、「無効なアクセストークン」というエラーが表示されます。それはvarトークンが空であるためですか? –

+0

答えに最初のコード例を入れてください。 "//アクセストークンを使用する..." –

+1

@ GillisWerrebrouckは、 'console.log(body);'行の直後に 'token = access_token;'行を追加するだけです。 – aring

関連する問題