Spotify API:从临时播放列表创建单选按钮不支持?

时间:2014-02-27 04:18:22

标签: spotify spotify-app

我正在构建一个生成临时播放列表的应用。然后我尝试为该临时播放列表创建一个“Start Radio”按钮。

按钮生成,但是当我点击它时,屏幕变为无线电,但不播放也不加载任何电台。

我猜这是不支持的,因为如果我创建一个常规的播放列表并且这样做,它会播放收音机...

但我在API中找不到任何确认或否认我猜测的信息。

是否有人知道这是否不受支持?

我真的宁愿从临时播放列表中做到这一点而不是维持一个真实的播放列表...

1 个答案:

答案 0 :(得分:1)

你是对的。 Start Radio Button不支持临时播放列表。不幸的是,文档没有提到这一点。

附加到临时播放列表的曲目数据似乎无法传递到Radio应用程序,因此Radio应用程序加载时没有上下文信息。

实现这一目标的唯一方法是,正如您所说,创建持久播放列表并为其创建单选按钮。为了不每次都创建新的播放列表,您还可以尝试在用户的库中找到之前创建的播放列表。

请参阅以下代码段:

require(['$api/models', '$api/library#Library', '$views/buttons#StartRadioButton'],
  function(models, Library, StartRadioButton) {

  // create a temporary playlist with some tracks
  var playlistName = 'Some name';

  models.Playlist.create(playlistName).done(function(playlist) {
    playlist.load('tracks').done(function(loadedPlaylist) {
      var track1 = models.Track.fromURI('spotify:track:5EB60KIbYgL8nWrHoYbfv4');
      var track2 = models.Track.fromURI('spotify:track:7GPuYTiBA5BloBnFaQBjbw');
      loadedPlaylist.tracks.add(track1);
      loadedPlaylist.tracks.add(track2);

      // now we can add a button to start a radio base on the newly
      // created playlist
      var button = StartRadioButton.forPlaylist(loadedPlaylist);
      document.body.appendChild(button.node);

      // bonus: we can also search for the playlist in the user's library
      // so we don't have to create a new one all the time.
      // this will work as long as we can find the playlist we created by name
      // (i.e. it hasn't been renamed).
      var currentLibrary = Library.forCurrentUser();
        console.log(currentLibrary);
        currentLibrary.playlists.snapshot().done(function(p) {
          for (var i = 0; i < p.length; i++) {
            var playlistFromLibrary = p.get(i);
            if (playlistFromLibrary && playlistFromLibrary.name == playlistName) {
              var button = StartRadioButton.forPlaylist(playlistFromLibrary);
              document.body.appendChild(button.node);
            }
          }
        });
      });
  });
});