Spotify API一次获取所有曲目

时间:2018-11-18 00:58:35

标签: javascript node.js spotify

我试图做一个使用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');
      }
    }
  });
}

1 个答案:

答案 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);

拥有每个播放列表的所有曲目后,就可以进行比较