当前位置: 首页 > 知识库问答 >
问题:

斑点。无法通过 oAuth 的第二部分(蟒蛇)

莫兴言
2023-03-14

我想创建一个应用程序,将添加一些歌曲到Spotify播放列表。所以使用Spotipy (Python库)来解决这个问题可能是个好主意。

要将歌曲添加到播放列表,我需要知道它的URI。要知道它的URI,我应该使用称为搜索(https://spotipy.readthedocs.io/en/2.19.0/#spotipy.client.Spotify.search)的方法。它需要一些输入,其中之一是授权,它需要访问令牌(文档https://developer.spotify.com/documentation/web-api/reference/#category-search链接)。然后我使用Spotify的授权指南进行授权(AuthGuidehttps://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-code-flow链接),然后我堆叠。

第一步很简单:

self.query = {
            'client_id': client_id,

            'response_type': 'code',
            'redirect_uri': 'andriime.github.com/pc/'
        }


        self.info_code = requests.get(url=SPOTIFY_URL, params=self.query)
        self.authorization_code = self.info_code.text

但第二步真的很可怕。我在整个互联网上搜索它的解决方案,并没有任何一个正常的指南如何通过它。但这是我发现的最好的:

Spotify API{'error':'invalid_client'}授权代码流[400]

请,如果你知道如何处理它或有一个答案,我错过了就写在这里!

编辑

如果我打印self.info_code响应代码是200。client_id和client_secret是环境变量,我在上面定义了它们(我没有发布此代码)。我的步骤2代码如下所示:

self.authorization_code = self.info_code.text

        code_payload = {
            'grant_type': 'authorization_code',
            'code': self.authorization_code,
            'redirect_uri': redirect_uri,
        }


        auth_str = '{}:{}'.format(client_id, client_secret)
        b64_auth_str = base64.urlsafe_b64encode(auth_str.encode()).decode()
        print(b64_auth_str)

        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Authorization': 'Basic {}'.format(b64_auth_str)
        }

        post_request = requests.post(url=API_URL, data=code_payload, headers=headers)
        print(post_request.text)

响应文本是{"error":"invalid_grant","error_description":"无效授权码"}。StackOverflow上有一个答案,但对我不起作用(如何修复从Spotify API请求reshresh_token时的“错误:invalid_grant无效授权码”?),因为我没有犯那里写的错误。

在Spotify社区论坛上也有一个答案,但那里没有答案。在另一个论坛上有一个问题,但它也没有得到解答

链接:

1.spotify.com/t5/Spotify-for-开发人员/无法获取-访问-令牌-使用-授权-代码流/m-p/5098258

2.https://developer.salesforce.com/forums/?id=906F00000009B2AIAU)

因此,如果您知道它应该如何工作,请再次询问您回答。非常感谢!

共有1个答案

姜彬郁
2023-03-14

好吧,我知道怎么做了。这个视频真的帮助了我(https://www.youtube.com/watch?v=yAXoOolPvjU),然而它是关于javascript的,但是概念是相同的。

在第一步之后(在得到self.info_code响应之后),您应该检查一些事情:

    < li >您的重定向uri是否与DashBoard中的相同,是否以正确的格式(https://example.com/callback/)写在那里,我在这里犯了一个错误-我在self.query中将“redirect _ uri parametr”写为“andriime.github.com/pc/”,而不是“https://andriime.github.io/pc/”(记住没有任何github.com,只有github.io,因此正确链接到DashBoard中也很重要)

2.参数(请求输入)中的“response_type”应等于“code”

print(f'{SPOTIFY_URL}?client_id={client_id}

SPOTIFY_URL等于"https://accounts.spotify.com/authorize"

然后您只需将链接复制并粘贴到浏览器中,然后单击一些“接受”按钮。在此之后,您将被重定向到您粘贴为“redirect_uri”的页面,然后您应该单击浏览器中的链接,您应该会在“redirect_uri”之后看到“代码”参数。

我知道,这部分有点复杂,但你应该看我上面链接的视频,这将是有用的,更容易理解

然后你可以复制我的代码的第二部分并使用它。但是,当然,改变参数。

        code_payload = {
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': redirect_uri,
        }


        auth_str = '{}:{}'.format(client_id, client_secret)
        b64_auth_str = base64.urlsafe_b64encode(auth_str.encode()).decode()

        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Authorization': 'Basic {}'.format(b64_auth_str)
        }
        new_response = requests.post(url=API_URL, headers=headers, params=code_payload)
        print(new_response.text)

这个答案也可以改进很多,所以我真的很想在这里看到你的反馈或其他答案,以使这个方法更简单、更美好

 类似资料:
  • 我正在尝试编写一个Python脚本,通过Spotify应用程序创建一个Spotify播放列表。我已经在Spotify的开发中心成功创建了一个应用程序,并将必要的变量输入到Spotipy的示例中(见下文)。但是,该脚本没有正确授权。我在服务器运行和不运行的情况下都进行了尝试,但都无济于事。堆栈上有类似的问题,但它们并没有提供完整的解决方案。任何建议都会很有帮助。 这是我通过命令提示符收到的消息: 用

  • 预备条件: VM 配置:Ubuntu 12.04 (x86) 什么是爆破? 在这个技巧中,攻击者选择特定的 Libc 基址,并持续攻击程序直到成功。假设你足够幸运,这个技巧是用于绕过 ASLR 的最简单的技巧。 漏洞代码: 编译命令: 上面展示了,Libc 随机化仅限于 8 位。因此我们可以在最多 256 次尝试内,得到 root shell。在下面的利用代码中,让我们选择作为 Libc 基址,并

  • Koa自述是下一代web框架: 由 Express 原班人马打造的 Koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。 使用 Koa 编写 web 应用,通过组合不同的 generator, 可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。 Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。 像Ruby Rac

  • 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大脑与这个概念融为一体,你会在你的梦想中看到它,它像幽灵一样困扰着你。下一步就是实现它,将其从大脑中移出并放进计算机。你必须杀死鬼魂,将幽灵从灵魂世界中带出来,将其绑定到一个 Python 图腾上,并将其扔到互联网的海洋中。 对你而言足够有创意嘛? 创造力的敌人就是起步。如果在安装程序的过程中存在障碍,你怎么能实现你的梦想?如果你的想法非常强

  • (Have you already read part one? If not, that's here .) (你读过第一部分么?如果没有,请戳这里)。 This series of articles is about functional specifications, not technicalspecifications. People get these mixed up. I don'

  • 我尝试在我的DB中更新一个表“image”并插入blob类型。 ImageClass: Hibernate用户映射: 利布: 错误: