【问题标题】:Spotify preview API search track and albumSpotify 预览 API 搜索曲目和专辑
【发布时间】:2013-04-18 06:44:26
【问题描述】:

我目前正在尝试将 Spotify 应用迁移到新的 1.0 版 api。

我遇到了搜索问题。我想用搜索字符串搜索目录,并从搜索结果中获取所有曲目信息、艺术家姓名和专辑名称。但是,搜索结果中似乎不包含专辑名称(仅 URI:s)。

之后我是否必须异步加载所有生成曲目的所有专辑名称?如果可能的话,我想避免这种情况。

我是这样搜索的

var search = Search.search(searchString);
search.tracks.snapshot().done(function(snapshot) {
    var results = snapshot.toArray();
    // no album names in the results tracks
}).fail(function() {
    console.error('Error retrieving snapshot');
});

【问题讨论】:

    标签: javascript spotify


    【解决方案1】:

    在 API 1.0 中,某些数据不会自动检索。这意味着,理想情况下,您将只获取您需要的数据,从而减少数据流量并提高性能。缺点是您需要自己编写曲目数组和专辑名称,以异步方式获取数据。

    对于您要获取其专辑名称的每首曲目。你会这样做:

    var maxTracks = 15;
    var search = Search.search(searchString);
    search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
      snapshot.toArray().forEach(function(result) {
        result.album.load('name').done(function(album) {
          // here you have access to the album.name attribute
        });
      });
    }).fail(function() {
      console.error('Error retrieving snapshot');
    });
    

    这种方法的问题在于,数据的顺序与轨道出现的顺序不同。如果需要保持顺序,可以使用Promise 对象:

    var maxTracks = 15;
    var search = Search.search(searchString);
    search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
      var promises = [];
      snapshot.toArray().forEach(function(result) {
        promises.push(result.album.load('name'));
      });
      models.Promise.join(promises)
        .done(function(albums) { console.log('Loaded all albums.', albums); })
        .fail(function(albums) { console.log('Failed to load at least one album.', albums); });
    }).fail(function() {
        console.error('Error retrieving snapshot');
    });
    

    使用Promises 的数组将保持与轨道相同的顺序。

    【讨论】:

    • 第二个版本似乎适用于我的应用程序,我不确定如何使用 Promise。
    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多