【问题标题】:Python - Spotipy: How do I grant access permissions to my script to stop getting this error?Python - Spotipy:如何授予脚本访问权限以停止出现此错误?
【发布时间】:2020-12-08 12:40:01
【问题描述】:

我正在尝试为个人项目获取我的个人 Spotify 数据,并正在使用 Spotipy api 来尝试这样做。主要是按照这个article/guide,写了这段代码:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy.util as util

cid ="********"
secret = "********"
redirecturi = 'http://localhost:8888'
username = "***"
client_credentials_manager = SpotifyClientCredentials(client_id=cid, client_secret=secret) 
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
scope = 'user-library-read playlist-read-private'
token = util.prompt_for_user_token(username, scope,client_id=cid,client_secret=secret,redirect_uri=redirecturi)
if token:
    sp = spotipy.Spotify(auth=token)
else:
    print("Can't get token for", username)

我收到一个错误,提示无法读取缓存:.cache-“我的用户名”,python 错误是这样的:

OSError                                   Traceback (most recent call last)
<ipython-input-2-57cc37944df1> in <module>
     16 sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
     17 scope = 'user-library-read playlist-read-private'
---> 18 token = util.prompt_for_user_token(username, scope,client_id=cid,client_secret=secret,redirect_uri=redirecturi)
     19 if token:
     20     sp = spotipy.Spotify(auth=token)

~\anaconda3\lib\site-packages\spotipy\util.py in prompt_for_user_token(username, scope, client_id, client_secret, redirect_uri, cache_path, oauth_manager, show_dialog)
     97 
     98     if not token_info:
---> 99         code = sp_oauth.get_auth_response()
    100         token = sp_oauth.get_access_token(code, as_dict=False)
    101     else:

~\anaconda3\lib\site-packages\spotipy\oauth2.py in get_auth_response(self, open_browser)
    437             # Only start a local http server if a port is specified
    438             if redirect_port:
--> 439                 return self._get_auth_response_local_server(redirect_port)
    440             else:
    441                 logger.warning('Using `%s` as redirect URI without a port. '

~\anaconda3\lib\site-packages\spotipy\oauth2.py in _get_auth_response_local_server(self, redirect_port)
    403 
    404     def _get_auth_response_local_server(self, redirect_port):
--> 405         server = start_local_http_server(redirect_port)
    406         self._open_auth_url()
    407         server.handle_request()

~\anaconda3\lib\site-packages\spotipy\oauth2.py in start_local_http_server(port, handler)
   1225 
   1226 def start_local_http_server(port, handler=RequestHandler):
-> 1227     server = HTTPServer(("127.0.0.1", port), handler)
   1228     server.allow_reuse_address = True
   1229     server.auth_code = None

~\anaconda3\lib\socketserver.py in __init__(self, server_address, RequestHandlerClass, bind_and_activate)
    450         if bind_and_activate:
    451             try:
--> 452                 self.server_bind()
    453                 self.server_activate()
    454             except:

~\anaconda3\lib\http\server.py in server_bind(self)
    136     def server_bind(self):
    137         """Override server_bind to store the server name."""
--> 138         socketserver.TCPServer.server_bind(self)
    139         host, port = self.server_address[:2]
    140         self.server_name = socket.getfqdn(host)

~\anaconda3\lib\socketserver.py in server_bind(self)
    464         if self.allow_reuse_address:
    465             self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
--> 466         self.socket.bind(self.server_address)
    467         self.server_address = self.socket.getsockname()
    468 

OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

有人可以告诉我应该如何授予访问权限,或者我是否做错了什么?如果有任何区别,我正在为此使用 Jupyter Notebook。另外,如果您知道获取我所追求的数据的更简单方法,请告诉我。

这是我的第一篇文章,因此对我在这里使用的任何不良做法表示歉意。

【问题讨论】:

    标签: python caching spotify spotipy oserror


    【解决方案1】:

    尝试在另一个环境/IDE 中运行它。 spotipy/oauth2.py 的第 310 行说明,如果尚未实例化令牌的缓存文件,Spotipy 会引发此警告。

    【讨论】:

    • 您好 Kweks45,感谢您的建议,但我尝试在 Atom 中运行代码,但遇到了同样的错误。抱歉,如果这是一个愚蠢的问题,但我该如何为令牌实例化缓存文件?
    • 谢谢,我试试看
    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2017-02-05
    • 2018-12-20
    • 2014-05-02
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2019-10-03
    相关资源
    最近更新 更多