Spotify:如何防止它记得听过超过 1 首歌曲?

Posted

技术标签:

【中文标题】Spotify:如何防止它记得听过超过 1 首歌曲?【英文标题】:Spotify: How to prevent it remembers listening more then 1 song? 【发布时间】:2012-04-20 11:10:54 【问题描述】:

我正在为 Spotify 申请。有了这个应用程序,我有一个简单的“订阅”功能,它允许我从用户正在收听的当前曲目中添加专辑的播放列表。一切正常。虽然我有这个错误。 听完一首以上的歌曲后,当我按下订阅按钮时,它会为每首听过的歌曲附加一个播放列表。

例如:我听了专辑的 3 首歌曲,然后按订阅:它将为每首歌曲附加 3 个播放列表。 然后:如果我然后听另一张专辑中的歌曲,当按下订阅时,它将为新歌和前 3 首歌曲附加一个播放列表。这一直发生,直到我重新加载应用程序。

它似乎会记住加载应用程序后听过的每一首歌。

这是我的代码:

函数订阅()

//Cache important information
var playerTrackInfo = player.track;
var track = playerTrackInfo.data;
var albumUri = track.album.uri;
var albumTitle = track.album.name;
var artistFromAlbum = track.album.artist.name;

//Click event on button
$(".subscribe button").on("click", function(playlist)
    console.log("I work!"); //Checks if button click works

    //Creates new playlist "Albumtitle - Artistname"
    var playlist = new models.Playlist(albumTitle+" - "+artistFromAlbum);

    //Fills in playlist with album from current playing track
    models.Album.fromURI(albumUri, function(album)
        $(album.tracks).each(function(i) 
            playlist.add(album.tracks[i]);
        );
    );

    playlist.subscribed = true;

    playlist.observe(models.EVENT.CHANGE, function() 
        console.log("Playlist was subscribed!");
    );
);

我需要一种方法来防止这个问题。我尝试了很多不同的方法并无休止地在网上搜索,但到目前为止还没有运气。任何帮助或指向正确方向都会很棒!

【问题讨论】:

【参考方案1】:

我已经解决了这个问题。

有 2 件事导致了这个错误。这是解决方案:

    我将所有变量都放在了点击事件中。

    我在代码的其他地方有一个 eventListener,这也使它成为错误。该事件监听器检测到他们的玩家状态是否发生了变化,如果为真,它将刷新初始化。但是,它显然将变量堆叠在我的 subscribe() 中。在将它从 eventListener 中取出并替换 var 之后,它终于可以正常工作了。

    function subscribe()
    
     //Click event on button within div with class 'subscribe'
     $(".subscribe button").on("click", function(playlist)
    console.log("I work!"); //Checks if button click works
    
    //Cache important information
    var playerTrackInfo = player.track;
    var track = playerTrackInfo.data;
    var albumUri = track.album.uri;
    
    //Creates new playlist "Albumtitle - Artistname"
    var albumTitle = track.album.name;
    var artistFromAlbum = track.album.artist.name;
    var playlist = new models.Playlist(albumTitle +" - "+ artistFromAlbum);
    
    //Fills in playlist with album from current playing track
    models.Album.fromURI(albumUri, function(album)
        $(album.tracks).each(function(i) 
            playlist.add(album.tracks[i]);
        );
    );
    
    playlist.subscribed = true;
    
    playlist.observe(models.EVENT.CHANGE, function() 
        console.log("Playlist was subscribed!");
    );
    

    );

感谢您的帮助!

【讨论】:

【参考方案2】:

嗯,它每次都会创建一个全新的播放列表,因为您在每次点击时都这样做:

var playlist = new models.Playlist(albumTitle+" - "+artistFromAlbum);

那一行中的new 确实意味着它;-)

如果您想通过多次点击使用相同的播放列表,请将您创建的播放列表存储在某个变量中,以便您以后可以再次访问它。不幸的是,目前无法查看用户拥有的播放列表列表。

【讨论】:

嗯,我认为我的问题不够具体。我编辑了我的描述,希望能更清楚地说明发生了什么。我还尝试使用变量(也包括数组)来存储附加的播放列表。为 1 个简单功能获取大量代码,但问题仍未解决。有什么想法吗?

以上是关于Spotify:如何防止它记得听过超过 1 首歌曲?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Spotify API 播放整首歌曲?

如何在 Spotify 上获取艺术家的所有歌曲?

如何从文件创建 Spotify 播放列表

如何使用NoteBurner Spotify Music Converter在没有 DRM 限制的情况下下载 Spotify 音乐

返回空的特定搜索结果(Spotify API)

如何知道用户何时使用 Spotify API 更改歌曲