libSpotifySDK:加载播放列表时超时

时间:2014-09-24 16:34:36

标签: python spotify libspotify

我使用libSpotify 12.1.51(linux-libc6 x86_64)和pyspotify来发出从python中发现的请求。

我们已经使用了这段代码很长一段时间了,但几周之前突然发生了超时。每次我尝试加载播放列表时,都会超时(我已尝试过很多播放列表)

这里有一些复制问题的代码:

import spotify
import logging
import os

class SpotifyClient(object):
    def __init__(self):
        config = spotify.Config()
        config.load_application_key_file(filename=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'spotify_appkey.key'))
        if spotify.session_instance:
            self.session = spotify.session_instance
        else:
            self.session = spotify.Session(config=config)
        if not self.session.connection_state == spotify.ConnectionState.LOGGED_IN:
            self.session.login('OUR_USERNAME', 'OUR_PASSWORD')
        while not self.session.user:
            self.session.process_events()

    def load_playlist(self, playlist_uri):
       self.playlist = spotify.Link(playlist_uri).as_playlist()
       self.playlist.load(timeout=20)

if __name__ == '__main__':

   logging.basicConfig(level=logging.DEBUG)

   client = SpotifyClient()
   client.load_playlist('spotify:user:melek136:playlist:32Gl8vkJmvJCHejGTEgM1t')

播放列表只是我从我正在尝试的列表中随机选择的一个。

以下是输出到控制台的内容:

DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Log message from Spotify: 16:18:40.516 E [ap:4172] ChannelError(0, 1, playlist)
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.playlist:Playlist state changed
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
DEBUG:spotify.session:Notify main thread
Traceback (most recent call last):
File "x.py", line 27, in <module>
    client.load_playlist('spotify:user:melek136:playlist:32Gl8vkJmvJCHejGTEgM1t')
File "x.py", line 20, in load_playlist
    self.playlist.load(timeout=20)
File "/home/entura/env/lib/python2.7/site-packages/spotify/playlist.py", line 103, in load
    return utils.load(self, timeout=timeout)
File "/home/entura/env/lib/python2.7/site-packages/spotify/utils.py", line 222, in load
    raise spotify.Timeout(timeout)
spotify.error.Timeout: Operation did not complete in 20.000s

1 个答案:

答案 0 :(得分:1)

libspotify本身没有加载播放列表的超时。实际上,在完美的条件风暴中(没有本地缓存​​,大帐户,播放列表服务行动缓慢),播放列表可能需要很长时间才能加载。

我不太熟悉libspotify的Python绑定,但是当然会引入超时。所以,解决它:

  1. 增加超时值

  2. 完全删除超时(或者,我想,设置一些疯狂的高数字)

  3. 有时,Spotify播放列表服务会有糟糕的一天,并且会一直放慢速度或完全放慢速度。如果你正在制作的应用程序是一个面向用户的东西,你应该告诉用户播放列表正在加载并将其保留在而不是错误输出。

    至于时间安排,您的缓存可能会被破坏,导致libspotify需要更多时间来加载播放列表。也许您加载的播放列表非常接近超时,现在它们会触发它。也许您的libspotify连接正在负载平衡到远离您的物理位置的Spotify服务器。除了删除缓存外,您不能影响任何这些事情。