首页 > 解决方案 > 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"}

有什么想法或见解吗?

标签: pythonpython-3.xspotipy

解决方案


我必须指定我从 PyCharm Professional(2019.3.3) 运行此代码,并且问题来自尾随空格。

当代码运行时,sp​​otipy 会根据您在应用程序中设置的重定向 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 问题。


推荐阅读