1

我现在在使用 Toplists 和 Image 时遇到困难,我希望有人可以帮助我。本质上,我想做的就是创建一个播放器和播放列表,其中包含艺术家的热门曲目。我尝试使用搜索,因为我无法从 Toplists 中获得所需的行为,但这并没有让我更接近,所以我想我会在这里问。

本质上,该功能应该:

  1. 取艺术家姓名或艺术家 ID
  2. 找出艺术家排名前 10 的曲目
  3. 创建一个新的临时播放列表并添加 10 首曲目
  4. 创建并插入播放器和播放列表

这看起来很容易,但它让我有点发疯。

4

2 回答 2

3

您可以使用该Toplist.forArtist功能获取艺术家的前 10 首曲目。

以下代码获取艺术家的前 10 首热门曲目并呈现列表视图和播放器:

require(['$api/toplists#Toplist', '$views/list#List', '$views/image#Image'],
  function(Toplist, List, Image) {

  var artist = models.Artist.fromURI('spotify:artist:2qk9voo8llSGYcZ6xrBzKx');
  var toplist = Toplist.forArtist(artist);

  // fetch the 10 most played tracks
  toplist.tracks.snapshot(0, 10).done(function(tracks) {

    // create temporary playlist
    models.Playlist
      .createTemporary('myTempList')
      .done(function(playlist){ 
        playlist.load('tracks').done(function(){
          for (var i = 0, l = tracks.length; i < l; i++) {
              var track = tracks.get(i);
              playlist.tracks.add(track);
          }

          // append a list view
          var listWrapper = document.getElementById('list-wrapper');
          var list = List.forPlaylist(playlist);
          listWrapper.appendChild(list.node);
          list.init();

          // append a player
          // note that you might have a grey placeholder
          // see https://stackoverflow.com/questions/17477655
          var playerWrapper = document.getElementById('player-wrapper');
          var player = Image.forPlaylist(playlist, {player: true});
          playerWrapper.appendChild(player.node);
      });
    });
  });
});

JS 代码引用了 2 个将包含视图的占位符:

    <div id="list-wrapper"></div>
    <div id="player-wrapper"></div>

请注意,由于临时播放列表的马赛克封面图像存在问题,您可能需要将默认封面占位符替换为其他图像。

于 2014-02-21T06:48:32.577 回答
-1

不幸的是,看来你必须暴力破解它。

  • 通过以下方式获取艺术家的所有曲目:
    • 迭代艺术家的所有专辑、出场、合辑、单曲并收集所有曲目
    • 使用记录不佳但可能很容易猜测的搜索模块并搜索艺术家,希望得到他们所有的曲目。这是高级搜索文档
  • 检索所有曲目的流行度
  • 找出最受欢迎的十首曲目
于 2014-02-20T14:29:13.837 回答