django spotify api python http 500 сообщение об ошибке - PullRequest
1 голос
/ 07 октября 2019

Здравствуйте, я пытаюсь создать сайт django, используя API Spotify, поэтому я пытаюсь получить простой пример кода, работающего с использованием библиотеки Python spotipy, но продолжаю получать HTTP post 500 при каждом вызове моего кода spotipy.

Прямо сейчас, если вы нажимаете кнопку на веб-сайте, он отправляет запрос на публикацию на одну из моих конечных точек, которая вызывает функцию python и должна возвращать текст. Это код функции Python:

import spotipy

def spotifyleastplayed_py(request):
    print("spotifyleastplayed_py()")
    if request.method == 'POST':

        print("0")
        sp = spotipy.Spotify()
        print("1")
        results = sp.search(q='weezer', limit=20)
        print("2")
        print(results)

        data = "temp spotifyleastplayed_py() Return Data"
        return HttpResponse(data) #HttpResponse(json.dumps("{test:bobo}"))

Когда функция вызывается, моя консоль выводит следующее сообщение об ошибке:

[06/Oct/2019 21:49:03] "GET /spotifyleastplayed HTTP/1.1" 200 1992
spotifyleastplayed_py()
0
1
[06/Oct/2019 21:49:07] "POST /spotifyleastplayed_py/ HTTP/1.1" 500 6326

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

1 Ответ

2 голосов
/ 07 октября 2019

Прежде всего, я бы посоветовал вам больше узнать об отладке вашего кода на Python, так как это важный навык для разработчика, и он может помочь вам в дальнейшем разобраться в проблеме. Например, из вашего примера можно сделать вывод, что ваша программа не выполняет ничего, кроме следующей строки

results = sp.search(q='weezer', limit=20)

Но единственная информация, которую вы получаете, - это код возврата 500, который не говорит вамименно то, что идет не так, только то, что что-то не правильно.

Один из первых шагов, которые вы могли бы предпринять, например, попытаться выяснить , что именно именно приводит к завершению вашего кода. Если вы оберните оператор в блок try, кроме, вы сможете точно увидеть, какая именно ошибка возникает, например, так:

try:
    results = sp.search(q='weezer', limit=20)
except Exception as e:
    print(e)

Это ловит ошибку, сгенерированную оператором, и печатает еекоторый выдаст следующее:

http статус: 401, код: -1 - https://api.spotify.com/v1/search?q=weezer&limit=20&offset=0&type=track: токен не предоставлен

Это уже гораздо более красноречивочем просто ошибка 500, верно? Я не рекомендовал бы этот метод для каждой проблемы в вашем коде, но это только начало.

Чтобы узнать больше о том, как отладить ваш код, вы можете прочитать такие статьи, как this .


В любом случае:

Когда я запускаю ваш код, spotipy.client.SpotifyException поднимается, потому что API Spotify возвращает код ошибки 401.

401 (Unauthorized) означает, что у вас естьнет авторизации для доступа к запрашиваемому ресурсу, и, в частности, для API Spotify, это означает, что вам нужно будет предоставить действительный токен.

Вам нужно будет запросить токен у пользователя и передать этот токен. при инициализации spotify так:

...
sp = spotipy.Spotify(auth=token)
results = sp.search(q='weezer', limit=20)
...

Как именно вы получаете этот токен от пользователя, зависит от остальной части вашей реализации. Я бы порекомендовал прочитать о потоке аутентификации Spotify

Есть также много других примеров того, как люди реализовали поток авторизации в spotipy, например, в этом потоке StackOverflow.

...