Javascript 如何使用spotify web api按用户获取播放列表?
我正在做一个项目,我想获得spotify上登录用户的所有播放列表。目前,我可以登录并查看用户信息(通过在spotify上进行演示)。现在,我想获取登录用户的播放列表,这就是我被卡住的地方 这是我的代码:Javascript 如何使用spotify web api按用户获取播放列表?,javascript,node.js,api,asp.net-web-api,spotify,Javascript,Node.js,Api,Asp.net Web Api,Spotify,我正在做一个项目,我想获得spotify上登录用户的所有播放列表。目前,我可以登录并查看用户信息(通过在spotify上进行演示)。现在,我想获取登录用户的播放列表,这就是我被卡住的地方 这是我的代码: /** * This is an example of a basic node.js script that performs * the Authorization Code oAuth2 flow to authenticate against * the Spotify Accou
/**
* 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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
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);
是我自己写的,但我不知道如何才能让它工作。Spotify API
播放列表
endpoint
非常原始的示例,在这些行中可以获得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
}));
});
首先,您访问'`进行身份验证,然后,您将访问''进行播放列表。它看起来比我的代码好得多,但仍然出现错误“无效访问令牌”。这是因为var标记是空的吗?我应该把第一个代码示例放在您的答案中的什么地方。将访问令牌“//用于…”@gilliswerbrebrouck的,只需添加行
token=access\u token代码>紧接着console.log(body)代码>行。如何将此json发送到我的视图,我已经可以打印它了,但这不是我想要的。我想在HTML页面中使用这些数据。我已经找到了一些关于ejs的信息,但不了解它是如何工作的,以及我需要如何做。这是使用ejs的最佳方法还是有其他方法?@Gilliswerbrebrouck,是时候用一些代码提出另一个问题了!:)
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
}));
});