python - Spotipy - 错误请求遵循文档示例
问题描述
按照此处的 Auth Code Flow 文档,我似乎无法使示例正常工作。
import apis
import spotipy
import spotipy.util as util
username = input("Enter username: ")
scope = "user-library-read"
token = util.prompt_for_user_token(username, scope,
client_id=apis.SPOTIFY_CLIENT,
client_secret=apis.SPOTIFY_SECRET,
redirect_uri="http://localhost")
if token:
sp = spotipy.Spotify(auth=token)
results = sp.current_user_saved_tracks()
for item in results['items']:
track = item['track']
print(track['name'] + ' - ' + track['artists'][0]['name'])
else:
print("Can't get token for", username)
我收到 400 错误请求错误:
Traceback (most recent call last):
File "/home/termozour/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/193.6494.30/plugins/python/helpers/pydev/pydevd.py", line 1434, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/termozour/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/193.6494.30/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/media/termozour/linux_main/PycharmProjects/SpotiDowner/main.py", line 27, in <module>
sp = spotipy.Spotify(auth=token)
File "/media/termozour/linux_main/PycharmProjects/SpotiDowner/venv/lib/python3.7/site-packages/spotipy/util.py", line 92, in prompt_for_user_token
token = sp_oauth.get_access_token(code, as_dict=False)
File "/media/termozour/linux_main/PycharmProjects/SpotiDowner/venv/lib/python3.7/site-packages/spotipy/oauth2.py", line 382, in get_access_token
raise SpotifyOauthError(response.reason)
spotipy.oauth2.SpotifyOauthError: Bad Request
是的,我已经看到人们必须解决此问题的其他想法,但没有一个对我有用:我尝试重置客户端密码,将我的 URI 更改为网站或本地主机,检查我的客户端 ID 和密码 ID,它们都是美好的。
我还尝试的是一直到 spotipy/oauth2.py 在那里我得到了回溯,添加了一个整洁的小点print(response.text)
并得到了一个了不起的{"error":"invalid_grant","error_description":"Invalid authorization code"}
有什么想法或见解吗?
解决方案
我必须指定我从 PyCharm Professional(2019.3.3) 运行此代码,并且问题来自尾随空格。
当代码运行时,spotipy 会根据您在应用程序中设置的重定向 URI 和代码询问您使用代码获得的确认 URL。
问题是当您运行项目时 PyCharm 如何在其终端窗口中处理 URL。当您输入 URL 并按 Enter 键时,PyCharm 会在浏览器中打开 URL(出于某种原因),因此解决方法是在 URL 后添加一个空格,然后按 Enter。这适用于 PyCharm,但有时会搞砸代码。在这种情况下,它做到了。
我尝试从 PyCharm 终端(python3)运行代码,粘贴 URL 并直接按下回车键。它不仅没有打开浏览器窗口,还接受了 URL 并让我从 Spotify 获取我的信息。
在任何情况下,代码都很好,是 IDE 破坏了这一切 - 也许一个好的建议是删除 url 之后的尾随空格,如果从库本身解析时有的话。
此“错误”已在此处报告并已标记为已修复(剧透警报:未修复)并将在 PyCharm 2020.1 中修复
我尝试从 PyCharm 2020.1 正常运行代码,一切正常,所以我可以确认:在我的情况下,这是一个 IDE 问题。
推荐阅读
- r - 使用最接近的匹配值交叉引用两个表
- php - Laravel 从表单传递数组并在控制器中解析
- ios - 如何在 WebView iOS-swift 中使用 InputStream 预览文件
- python - Python 解析 json 数据到 Netezza 表
- python - 时间序列数据框。绘制具有相对起点的两个不同时间范围
- imagej - 使用 ROI 中的平均像素值对图像进行归一化
- python - 为什么我得到 -2//4 的输出为 -1?
- wordpress - 我将如何在定制器 woocommerce 部分下添加一个选项?
- c# - 带有 Distinct 和 WHERE 子句的 LINQ 查询
- ios - iOS BLE 重新连接失败