使用 Spotify webAPI 播放艺术家(ID)的随机专辑

Posted

技术标签:

【中文标题】使用 Spotify webAPI 播放艺术家(ID)的随机专辑【英文标题】:Using Spotify webAPI to play random album of artist (ID) 【发布时间】:2016-08-15 20:28:59 【问题描述】:

这是我的“小”项目,因为我自己不是开发人员,请不要因为我的愚蠢问题而责备我。

我想创建一个“有声读物机”。

我想使用一个网站,该网站展示了几位有声读物的艺术家。如果我点击一位艺术家,则应播放所点击艺术家的随机有声读物。

我看过这个代码示例:http://jsfiddle.net/qlmhuge/t7a1sh4u/

// find template and compile it
var templateSource = document.getElementById('results-template').innerhtml,
    template = Handlebars.compile(templateSource),
    resultsPlaceholder = document.getElementById('results'),
    playingCssClass = 'playing',
    audioObject = null;

var fetchTracks = function (albumId, callback) 
    $.ajax(
        url:     'https://api.spotify.com/v1/artists/61qDotnjM0jnY5lkfOP7ve/albums/',
        success: function (response) 
            callback(response);
        
    );
;

var searchAlbums = function (query) 
    $.ajax(
        url: 'https://api.spotify.com/v1/search',
        data: 
            q: 'artist:' + query,
            type: 'album',
            market: "DE"
        ,
        success: function (response) 
            resultsPlaceholder.innerHTML = template(response);
        
    );
;

results.addEventListener('click', function(e) 
    var target = e.target;
    if (target !== null && target.classList.contains('cover')) 
        if (target.classList.contains(playingCssClass)) 
            audioObject.pause();
         else 
            if (audioObject) 
                audioObject.pause();
            
            fetchTracks(target.getAttribute('data-album-id'), function(data)                 
                audioObject = new Audio(data.tracks.items[0].preview_url);
                audioObject.play();
                target.classList.add(playingCssClass);
                audioObject.addEventListener('ended', function() 
                    target.classList.remove(playingCssClass);
                );
                audioObject.addEventListener('pause', function() 
                    target.classList.remove(playingCssClass);
               );
            );
        
    
);

searchAlbums('TKKG');

但我不知道如何将其更改为播放一位艺术家的随机专辑。

艺术家将由 Spotify ID 定义,以便艺术家是正确的。

有人可以帮我解决我的问题吗?完成我的目标还需要哪些信息?

如果有人能给我一个提示或其他任何东西,我会非常感激,以找到正确的方向。

最好的问候, 去吧

【问题讨论】:

【参考方案1】:

你必须在这里修改你的fetchTracks函数:

var fetchTracks = function (albumId, callback) 
    $.ajax(
        url: 'https://api.spotify.com/v1/albums/' + albumId,
        success: function (response) 
            callback(response);
        
    );
;

jsFiddle link

【讨论】:

@goeste 你试过附加 jsfiddle 吗? 嗨 Oleg,是的,我做到了,但这实际上是来自 spotify 的示例脚本。我只想获得一张(我选择的)图像并在其后面放置一个链接。该链接应该开始播放某个音乐家/艺术家的随机专辑;)【参考方案2】:

我离终点线有点近了……好吧,我猜:

我在GitHub上找到了以下内容:

var SpotifyWebApi = require('spotify-web-api-node');

var spotifyApi = new SpotifyWebApi();

// credentials are optional
// var spotifyApi = new SpotifyWebApi(
//   clientId : '',
//   clientSecret : '',
//   redirectUri : ''
// );

// Get albums by a certain artist
spotifyApi.getArtistAlbums('3meJIgRw7YleJrmbpbJK6S')
  .then(function(data) 
    console.log('Artist albums', data.body);
  , function(err) 
    console.error(err);
  );

但是,我只能从 35 张专辑中获得 20 张。我需要增加限制。正如我在 Spotify 的开发者网站上看到的那样,最大限制是 50。由于我只需要从 35 张专辑中(随机)获取一张,如何实现随机化功能和播放功能才能工作?

我仍在研究如何从结果中创建一个链接以显示在带有 node.js 的网站上。

最好的问候,并提前感谢您的任何帮助/帮助! -goeste

【讨论】:

好的,找到了限制。我需要更改请求行:spotifyApi.getArtistAlbums('3meJIgRw7YleJrmbpbJK6S', limit: 50)

以上是关于使用 Spotify webAPI 播放艺术家(ID)的随机专辑的主要内容,如果未能解决你的问题,请参考以下文章

Spotify - 如何创建一个播放列表,包括艺术家的某些专辑

Spotify WebApi 无法获取用户播放列表数据

即使在添加身份验证令牌以获取艺术家的播放列表后,Spotify API 也会出现 CORS 错误

Spotify 清除播放列表拖放

Spotify API 组艺术家/专辑

使用 Spotify Web API 播放曲目