django spotify api python http post 500 错误

Posted

技术标签:

【中文标题】django spotify api python http post 500 错误【英文标题】:django spotify api python http post 500 error 【发布时间】:2020-02-04 06:34:59 【问题描述】:

您好,我正在尝试使用 spotify api 制作一个 django 网站,因此我正在尝试使用 spotipy python 库获取一些简单的示例代码,但每当调用我的 spotipy 代码时,都会收到 http post 500。

现在,如果您单击网站上的按钮,它会向我的一个端点发出发布请求,该端点调用 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

我是否需要将 spotipy url 添加到 django 某个地方以便库可以成功调用?似乎它未能向 spotipy 发出 http 请求。

【问题讨论】:

【参考方案1】:

首先,我建议您了解有关调试 Python 代码的更多信息,因为这是作为开发人员必须具备的一项关键技能,它可能会帮助您下次深入解决问题。例如,您可以从示例中推断出的一件事是,您的程序不会执行超出以下行的任何内容

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

但是你得到的唯一信息是一个 500 返回码,它并不能准确地告诉你出了什么问题,只是 something 是不正确的。

例如,您可以采取的第一步是尝试找出 是什么 导致您的代码终止。如果将语句包装在 try except 块中,您将能够准确地看到发生了什么样的错误,如下所示:

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,因为 Spotify API 返回 401 错误代码。

401(未授权)表示您无权访问所请求的资源,特别是对于 Spotify API,这意味着您需要提供有效的令牌。

您需要向用户请求一个令牌,并在初始化 spotify 时传递该令牌,如下所示:

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

您从用户那里获得此令牌的具体方式取决于您的实施的其余部分。 我建议阅读Spotify's authentication flow

还有很多关于人们如何在 spotipy 中实现授权流程的其他示例,例如 this *** thread.

【讨论】:

以上是关于django spotify api python http post 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 spotify api 控制 spotify web player sdk 的播放状态

在 Spotify 的搜索 API 中按艺术家搜索的正确 python 语法?

Spotify API:使用 Python 通过 JSON 解析时出错

python 上的 Spotify API 授权错误

多参数 curl 请求 Python、Spotify API

使用 Python 的 Spotify API 授权代码流