我试图做一个使用Spotify API的Web应用程序(使用node.js作为服务器),但是最近遇到了一个我无法解决的问题。基本上,我想比较两个播放列表的内容,但是由于API每个请求仅提供100首曲目,因此我找不到解决方法。我已经尝试在请求内使用循环,但似乎无法正常工作。
request.get(options, function(error, response, body) {
var data = [];
data.push(JSON.parse(JSON.stringify(body)));
let urls = [];
for (let i = 0; i < data[0].total; i = i + data[0].limit){
urls.push('https://api.spotify.com/v1/me/tracks?offset='+i);
}
data = [];
for (let i = 0; i < urls.length; i++) {
options.url = urls[i];
request.get(options, function(error, response, body) {
let tmp = JSON.parse(JSON.stringify(body));
let items = tmp.items
if (items != null){
for(let o of tmp.items) {
data.push(o.track.name);
}
if (tmp.next == null){
return res.send(JSON.stringify(data));
console.log('done');
}
}
});
}
答案 0 :(得分:0)
您可以在播放列表中对get all tracks
使用递归。
您可能有一个获取播放列表 page 的方法,然后循环调用它,直到没有更多要检索的曲目为止。仅作为示例,这是伪代码中的一种可能的解决方案。我写的很快,所以可以原谅任何错误...
function getplaylisttracks(playlistid, pagesize,offset) {
//call 'get tracks' api with pagesize and offset
//return response
}
var offset = 0;
var pagesize = 100;
var continueloop = true;
var result = getplaylisttracks(YOURID, pagesize, offset);
do {
try {
//*** process result tracks into your array here ***
if(result.next!=null) {
offset = offset+pagesize;
result = getplaylisttracks(YOURID, pagesize, offset);
}
else {
continueloop = false;
}
}
catch(e) {
//handle error here...
continueloop = false;
}
}
while(continueloop);
拥有每个播放列表的所有曲目后,就可以进行比较