【问题标题】:Spotify Apps - Getting Playlist TracksSpotify 应用程序 - 获取播放列表曲目
【发布时间】:2012-02-20 14:06:00
【问题描述】:

我正在开发一个 Spotify 应用,并希望获取播放列表的曲目。有函数playlist.tracks,但它似乎被缓存并获取了错误的曲目列表。它也应该很慢,不建议在 API 文档中使用。但是我还有什么其他选择可以获得播放列表的曲目?目前我正在使用playlist.tracks 一次并将曲目列表通知给我的后端。

谢谢。

【问题讨论】:

  • 你确定你最近检查过 API 吗? (here)
  • 是的,您能否更具体地说明我应该查看的内容?那只是引用playlist.tracks 函数。
  • 不抱歉,我只是想看看您使用的是最新版本。他们选择tracks 属性而不是getTracks() 方法似乎很奇怪。 toString() 方法返回什么?它可能会返回一个带有轨道信息的 JSON 字符串,您可以对其进行解析。
  • 啊,是的,我已经被那个咬了!我认为tracks 只是一个函数的别名,因为我怀疑他们会担心变量访问的性能! toString() 只是给我返回了一个错误,烦人。但是它返回的错误引用了name,所以我只能想象它只输出名称。
  • 由于错误引用了name,因此您的Playlist 对象似乎尚未实例化(请参阅API 中的构造函数行),或者至少未正确实例化。因此toString() 上的错误和错误/空白曲目列表的返回。抱歉,我不能更具体,但我从未使用过 Spotify API!

标签: javascript spotify


【解决方案1】:

对于 1.0 API:

require([
  '$api/models'
], function (models) { 

 var addList = function(list) {
    list.load('tracks').done(function(list) {
        list.tracks.snapshot().done(function(trackSnapshot){
            var tracks = trackSnapshot.toArray();
            for(var i=0; i<tracks.length; i++) {
                addTrack(tracks[i]);
            }
        });
    });
 }

 var addTrack = function(track) {
    track.load('name','artists').done(function(track) {
        var artists = track.artists;
        var artistsList = [];
        for (var i=0; i<artists.length; i++) {
            artistsList.push(artists[i].name);
        }
        // Print out info if desired
        var addedTrackRow = document.createElement('p');
        addedTrackRow.innerHTML = "Added track: " + artistsList.join(', ') + ' - ' + track.name;
        document.getElementById('addedTracks').appendChild(addedTrackRow);

    });
 }

 exports.addList = addList;
 exports.addTrack = addTrack;
}

// Example of use:
addList(models.Playlist.fromURI(...))
addTrack(models.Track.fromURI(...))

我已经按照上面的方法对其进行了测试,并且可以正常工作。

我自己花了一些时间寻找这个问题的答案,并且我也在寻找如何访问列表中的曲目,即使它在“元数据”部分下的tutorial-app available on github 中有解释; “从艺术家、专辑、曲目或播放列表中获取元数据”。

希望对你有用。

【讨论】:

    【解决方案2】:

    这是一个小样本:

    pl = new m.Playlist();
    alb = m.Album.fromURI(uri, function(album) { 
       pl.name = album.name;
       $.each(album.tracks,function(index,track){
          pl.add(m.Track.fromURI(track.uri));   
       });
    

    希望对你有帮助....

    $.each(pl.data.all(),function(i,track){ myAwesomePlaylist.add(track); }); 
    

    pl 是播放列表

    【讨论】:

    • 我想你误解了我的问题。我正在尝试获取播放列表的曲目,而不是将专辑的曲目放入播放列表。我有播放列表的 URI,需要其中的曲目。 playlist.tracks 正在为我的一个播放列表返回错误的曲目。 API 实际上建议您无论如何都不要使用playlist.tracks,所以我想知道是否有其他获取它们的方法。
    • 啊,是的,你说得对,我误解了... $.each(pl.data.all(),function(i,track){ myAwesomePlaylist.add(track); });其中 pl 是播放列表
    • 嗯,这将返回相同的列表,但作为 URI 而不是 Track 对象。我希望 Spotify 能明确说明哪种方法是首选方法。
    【解决方案3】:

    Playlist 类实现了接口Collection。因此,您可以在循环中通过播放列表对象调用函数get 以获取所有曲目。示例代码:

    var i=0;
    for (i=0;i<models.library.starredPlaylist.length;i++)
    {
        var track = models.library.starredPlaylist.get(i);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 2015-09-08
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多