多变的。无法通过 oAuth (Python) 的第二部分
Posted
技术标签:
【中文标题】多变的。无法通过 oAuth (Python) 的第二部分【英文标题】:Spotipy. Can`t pass the second part of oAuth (Python) 【发布时间】:2021-10-22 17:04:17 【问题描述】:我想创建一个应用程序,它将某些类型的歌曲添加到 Spotify 播放列表中。因此,使用 Spotipy(Python 库)来解决它可能是一个好主意。
要将歌曲添加到播放列表,我需要知道它的 URI。要知道它的 URI,我应该使用名为 search (https://spotipy.readthedocs.io/en/2.19.0/#spotipy.client.Spotify.search) 的方法。它需要一些输入,其中之一是 Authorization,它需要访问令牌(文档链接https://developer.spotify.com/documentation/web-api/reference/#category-search)。然后我使用 Spotify 的授权指南进行授权(AuthGuide https://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' Authorization Code Flow [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":"Invalid authentication code"。 *** 上有一个答案,但它对我不起作用(How to fix 'error: invalid_grant Invalid authorization code' when asking for reshresh_token from Spotify API?),因为我没有犯那个写在那里的错误。
在 Spotify 社区论坛上也有答案,但那里没有答案。另一个论坛有一个问题,但也没有答案
链接:
1.https://community.spotify.com/t5/Spotify-for-Developers/Unable-to-get-access-token-using-authorization-code-flow/m-p/5098258
2.https://developer.salesforce.com/forums/?id=906F00000009B2AIAU)
因此,如果您知道它应该如何工作,请再次要求您回答。非常感谢!
【问题讨论】:
您好,我认为这个问题有点像***.com/questions/54313030/… 的重复,请先查看那个问题,然后用您不理解的任何内容编辑您的问题。 @EricTaurone 感谢您的回复!我会尝试这种方法,但我需要一些时间才能了解如何正确使用它 @EricTaurone 感谢您的反馈,但这个答案并不是我所需要的。现在我设法得到了正确的答案,但谢谢你,那篇文章也对我有帮助) 【参考方案1】:好的,我知道怎么做。这个视频对我很有帮助 (https://www.youtube.com/watch?v=yAXoOolPvjU),但是它是关于 javascript,但概念是一样的。
在第一步之后(在得到 self.info_code 响应之后)你应该检查一些事情:
-
您的重定向 uri 是否与 DashBoard 中的相同,是否以正确的格式 (https://example.com/callback/) 写在那里,我犯了一个错误 - 我在 self.query 中有 'redirect_uri 参数'andriime.github.com/pc/' 不是 'https://andriime.github.io/pc/' (同样重要的是要记住没有任何 github.com,只有 github.io,所以正确链接直接进入仪表板)
2.params(requests 输入)中的“response_type”应等于“code”
-
在这之后,你应该得到一个你的请求的链接(我没有找到如何漂亮地做到这一点,所以写了这个:
print(f'SPOTIFY_URL?client_id=client_id&client_secret=client_secret&response_type=self.query["response_type"]&redirect_uri="https://andriime.github.io/pc/"')
其中 SPOTIFY_URL 等于“https://accounts.spotify.com/authorize”
然后您只需将链接复制并粘贴到浏览器中,然后单击一些“接受”按钮。在此之后,您将被重定向到您粘贴为“redirect_uri”的页面,然后您应该点击浏览器中的链接,您应该会在“redirect_uri”之后看到“code”参数。
我知道,这部分有点复杂,但你应该看看我上面链接的视频,它会更有用也更容易理解
然后你可以复制我的代码的第二部分并使用它。但是,当然,更改参数。
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)
这个答案也可以改进很多,所以我真的很想看看你的反馈 或此处的其他答案以使此方法更简单,更美观
【讨论】:
以上是关于多变的。无法通过 oAuth (Python) 的第二部分的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 OAuth2 为 AdWords 帐户生成刷新令牌
使用 Python / Django 的 Google API 示例的 Oauth
python & smtplib:是不是可以使用 oauth2 通过 gmail 发送邮件?