获取当前用户的已加星标的播放列表或库和曲目/艺术家

时间:2014-05-16 18:00:29

标签: javascript spotify spotify-app

我已经研究了相当数量,并且无法找到解决这一特定主题的任何内容。

我希望获取当前用户库中的所有艺术家,或者甚至是特定的播放列表,例如“已加星标”播放列表。

当我尝试进入播放列表中的艺术家或曲目时,我会回到'undefined'

我做错了吗?

这是我用来显示库对象的一些基本的javascript,我得到的就是图片中的内容,但我不知道如何进入单独的曲目和艺术家。有帮助吗?

require(['$api/models','$api/library'], function(models, library){
    'use strict';
    var Library = library.Library.forCurrentUser();
    console.log(Library.starred);
});

以下是我要回来的模特的图片:http://i.imgur.com/ERo0Cx9.png

1 个答案:

答案 0 :(得分:1)

稍微复杂一些。 Library.starred是一个Playlist对象,它延迟加载属性。因此,您需要传递要加载的属性,在本例中为tracks。由于曲目是Collection,因此您需要执行Snapshot,一旦获得曲目,您需要指定要从曲目加载的属性。

以下是从已加星标的播放列表中获取所有曲目并打印出其名称和uri的代码:

require(['$api/models','$api/library'], function(models, library){
    'use strict';
    var Library = library.Library.forCurrentUser();
    Library.starred.load('tracks').done(function(playlist) {
        playlist.tracks.snapshot().done(function(tracks) {
            var promises = [];
            // we fetch all the tracks
            for (var i = 0, l = tracks.length; i < l; i++) {
                var track = tracks.get(i);
                // fetch the information we need from the tracks
                // e.g. uri and name
                promises.push(track.load('uri', 'name'));
            }

            models.Promise.join(promises).done(function(tracksPromises) {
                tracksPromises.forEach(function(tp) {
                    console.log(tp.uri + ' - ' + tp.name);
                });
            });
        });
    });
});