Spotify api 1.0.0 获取给定曲目集的播放列表的图像

Posted

技术标签:

【中文标题】Spotify api 1.0.0 获取给定曲目集的播放列表的图像【英文标题】:Spotify api 1.0.0 get image of playlist of given set of tracks 【发布时间】:2013-07-02 21:27:28 【问题描述】:

在获取给定曲目集的播放列表的图像时,我在这里失去了理智。

我就是无法让它工作。

这是我的代码。

我包含了两个播放列表,一个由给定的一组曲目组成,一个由实际存在的曲目组成。

我在第一个问题上做错了什么?我是否正确地创建了临时播放列表?

require([
            '$api/models',
            '$views/image#Image',
            '$views/list#List'
        ], function(models, Image, List) 
            'use strict';

            var image, trackUris, tracks = [], customPlaylist, customPlaylistList;

            // list of track uris
            trackUris = [
                'spotify:track:0jakfggA0WkYpkAXni6pts',
                'spotify:track:2g1EMRbn6So6zGTdwNyySf',
                'spotify:track:4kNfh9In8hjuuERSZhwTTx',
                'spotify:track:1JHUxxd77M4ViaqJZfBdl0',
                'spotify:track:6x3db7BbBjDYZH2ZAcvYyC',
                'spotify:track:6czyeVTQtHYPnZgXE6op0I',
                'spotify:track:51Vyh1xfCD27SneoG7NAhb'
            ];

            // get track objects from uris
            for (var i = 0; i < trackUris.length; i++) 
                tracks.push(models.Track.fromURI(trackUris[i]));
            

            // create temporary playlist
            var title = 'tmp_' + Date.now();
            var tmp = models.Playlist.createTemporary(title).done(function(playlist)

                // get tracks collection and add tracks to it
                playlist.load(['tracks']).done(function()
                    for (var i = 0; i < tracks.length; i++) 
                        playlist.tracks.add(tracks[i]);
                    
                );
                customPlaylist = playlist;

            ).fail(function() 
                console.log("Failed");
            );

            // create image of playlist
            image = Image.forPlaylist(customPlaylist, width: 200, height: 200, player: true);
            document.getElementById('customPlaylistCover').appendChild(image.node);

            // create a list view for the playlist
            customPlaylistList = List.forPlaylist(customPlaylist);
            document.getElementById('customPlaylistList').appendChild(customPlaylistList.node);
            customPlaylistList.init();

            // get all the above for an existing playlist
            var playlist = models.Playlist.fromURI('spotify:user:116690321:playlist:6l3dvYJaGrX5mqkNntbyLx');
            image = Image.forPlaylist(playlist, width: 200, height: 200, player: true);
            document.getElementById('playlistCover').appendChild(image.node);

            var playlistList = List.forPlaylist(playlist);
            document.getElementById('playlistList').appendChild(playlistList.node);
            playlistList.init();

        );

【问题讨论】:

【参考方案1】:

你在这里没有做错任何事。目前,临时播放列表会显示占位符图像而不是马赛克。

调试代码(如果没有缩小它会有所帮助)将显示占位符图像(带有注释的灰色背景)设置为节点的图像,但在时间限制过去之前保持隐藏状态(少于半第二)。在此期间,正在加载播放列表中的图像属性。如果图像加载成功,如果没有超过时间限制,占位符将被替换或根本不显示。下面的代码尝试从临时播放列表加载图像属性,但失败,因此显示占位符。

require(['$api/models', '$views/image#Image'], function(models, Image) 
    models.Playlist.createTemporary("Temporary Playlist").done(function(playlist) 
        playlist.load("tracks").done(function(playlist) 

            // Adding some random tracks to the temporary playlist
            playlist.tracks.add(models.Track.fromURI("spotify:track:2YtDzuAcSVk2j4UFXON5iG"));
            playlist.tracks.add(models.Track.fromURI("spotify:track:6xzCQrXrn0uOOKBQZK1zsF"));
            playlist.tracks.add(models.Track.fromURI("spotify:track:0m1sOrAltrx0oQlqKVUf75"));
            playlist.tracks.add(models.Track.fromURI("spotify:track:40RFNnTV6CAounCsx56TZ2"));

            // Checking if the playlist image can be loaded.
            // This code holds no purpose other than showing that 
            // loading an image from a temporary playlist fails
            playlist.load("image").done(function(playlistWithImage) 
                console.log("Loaded image.");
            ).fail(function(playlistWithImage) 
                console.log("Failed to load image.");
            )

            // Appending the playable node to the body tag
            var image = Image.forPlaylist(playlist, width: 100, height: 100, player : true );
            document.body.appendChild(image.node);
        );
    );
);

我不知道这是否被认为需要修复,但它就是这样。

【讨论】:

好的,但它应该显示马赛克,对吧?在以前的 API 中它可以工作,为什么这不起作用:s 我已经扩展了我之前的答案,希望它有所帮助! 感谢您的澄清,但这并不能解决问题:) 我用 models.Playlist.create('Test').done(...);并且每次都有效。但是由于某种原因,您无法从临时播放列表中加载马赛克。这意味着,如果您正在构建一个从随机曲目(例如来自 Echo Nest)生成播放列表的应用程序,您将无法显示马赛克图像。我唯一的解决方法是获取前 4 个音轨的图像 ID,并通过将背景图像更改为 spotify:mosaic:id1:id2:id3:id4 自己创建马赛克,但这似乎太错误了:)跨度> 确实没有解决问题。但是,它确实解释了为什么您不会获得临时播放列表的马赛克图像。如果您将另一个参数添加到失败函数并记录该值,您将看到错误消息是“未实现”。我没有参与这项工作,所以我猜这个功能还没有为临时播放列表实现。 好的,感谢您的提醒。你可以让我联系负责这件事的团队吗?

以上是关于Spotify api 1.0.0 获取给定曲目集的播放列表的图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spotify Apps API 从给定播放列表中的特定曲目开始

使用 ISRC 代码从 Spotify API 获取多个曲目

Spotify API 根据曲目名称获取曲目信息?

获取 Spotify 用户当前播放的曲目名称 [Web API]

如何使用 spotify api 获取艺术家的所有曲目?

使用 ISRC 代码从 Spotify API 获取曲目信息