繁体   English   中英

Spotify API一次获取所有曲目

[英]Spotify API Getting all tracks at once

我正在尝试制作一个使用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');
      }
    }
  });
}

您可以使用递归来get all tracks播放列表中的get all tracks 您可以使用一种方法来获取播放列表页面,然后循环调用该页面 ,直到没有更多要检索的曲目为止。 仅作为示例,这是伪代码中的一种可能的解决方案。 我写的很快,所以请原谅任何错误...

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

在获得每个播放列表的所有曲目后,您可以进行比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM