Spotipy - Плохой запрос, следующий за примером do c - PullRequest
0 голосов
/ 29 февраля 2020

Следуя документам здесь для потока кода аутентификации, я не могу заставить пример работать.

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 Bad Request:

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, и все они в порядке.

Я также попытался go до пути к spotipy / oauth2.py, где я получил трассировку, добавил аккуратный маленький print(response.text) и получил изумительный {"error":"invalid_grant","error_description":"Invalid authorization code"}

Есть идеи или идеи?

1 Ответ

0 голосов
/ 01 марта 2020

Я должен указать, что я запустил этот код из PyCharm Professional (2019.3.3), и проблема возникла из-за пробела.

Когда код запускается, spotipy запрашивает тот URL-адрес подтверждения, который вы получаете с кодом на основе URI перенаправления, установленного в приложении, и кода.

Проблема заключалась в том, как PyCharm обрабатывает URL-адреса в окне терминала при запуске проекта. Когда вы вводите URL-адрес и нажимаете клавишу ввода, PyCharm открывает URL-адрес в браузере (по какой-то причине), поэтому в качестве обходного пути для этого следует добавить пробел после URL-адреса и нажать клавишу ввода. Это работает для PyCharm, но иногда портит код. В данном случае это так.

Я попытался запустить код из терминала PyCharm (python3), вставил URL-адрес и сразу нажал клавишу ввода. Он не только не открыл окно браузера, но также принял URL-адрес и позволил мне получить информацию от Spotify.

В любом случае, код в порядке, это была среда разработки, которая все это ломала - может быть, хорошим предложением было бы удалить завершающие пробелы после URL-адреса, если таковые имеются при разборе из самой библиотеки.

Об этой «ошибке» сообщалось здесь и было помечено как исправленное ( предупреждение о спойлере: не исправлено) и будет исправлено в PyCharm 2020.1

Я попытался нормально запустить код из PyCharm 2020.1 и все работает нормально, поэтому я могу подтвердить: в моем случае это была проблема IDE.

...