【问题标题】:Spotify App API: Creating a player of top tracks from an artistSpotify App API:创建来自艺术家的热门曲目的播放器
【发布时间】:2014-03-20 21:08:05
【问题描述】:

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

基本上,功能应该:

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

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

【问题讨论】:

  • 贴出你的toplist代码可能会更好,我们可以看看它有什么问题。

标签: javascript jquery api spotify spotify-app


【解决方案1】:

您可以使用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>

请注意,由于mosaic cover images for temporary playlist 存在问题,您可能需要将默认封面占位符替换为另一张图片。

【讨论】:

  • 这是完美的。谢谢!
  • 您是否有将播放器图像更改为自定义 jpeg 的链接?
  • 你会做类似var player = Image.fromSource('img/image.png', {playerItem: playlist, player: true}); playerWrapper.appendChild(player.node);
【解决方案2】:

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

  • 通过以下方式获取艺术家的所有曲目:
    • 迭代所有Artist's 专辑、出场、合辑、单曲并收集所有曲目
    • 使用文档很少但可能很容易猜到的Search 模块并搜索艺术家,希望得到他们所有的曲目。这是advanced search docs
  • 检索所有曲目的流行度
  • 查找人气最高的十首曲目

【讨论】:

  • 我打算编写一些示例代码,但是,我不认为你会走这条路。也许last.fm/api/show/artist.getTopTracks 会是更好的选择?尽管您随后必须使用 echonest 的 Rosetta 将 MBID 转换为 spotify uri。
  • 反对者的注意事项 - 我的回答是基于我的印象,即提问者不想使用艺术家的热门曲目。
猜你喜欢
  • 2021-07-22
  • 2017-04-27
  • 2012-09-27
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多