斑点。无法通过 oAuth 的第二部分 (Python)
Spotipy. Can`t pass the second part of oAuth (Python)
我想创建一个应用程序,将一些歌曲添加到 Spotify 播放列表。所以使用 Spotipy(Python 库)来解决它可能是个好主意。
要将歌曲添加到播放列表,我需要知道它的 URI。要知道它的 URI,我应该使用名为 search (https://spotipy.readthedocs.io/en/2.19.0/#spotipy.client.Spotify.search). It requires some inputs and one of them is Authorization, which requires access token (link for docs https://developer.spotify.com/documentation/web-api/reference/#category-search). Then I used Authorization Guide from Spotify to authorize(link for 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是环境变量,我在上面定义了它们(我没有 post 这段代码)。我的第 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":"无效授权码"}。 Whosebug 上有一个答案,但它对我不起作用 (How to fix 'error: invalid_grant Invalid authorization code' when asking for reshresh_token from Spotify API?),因为我没有犯那里写的那个错误。
Spotify community forum 上也有答案,但是那里没有答案。在另一个论坛上有一个问题,但也没有回答
链接:
2.https://developer.salesforce.com/forums/?id=906F00000009B2AIAU)
所以再次请你回答你是否知道它应该如何工作。非常感谢!
好的,我知道怎么做了。这个视频对我很有帮助 (https://www.youtube.com/watch?v=yAXoOolPvjU),但是它是关于 javascript,但概念是一样的。
在第一步之后(在得到 self.info_code 响应之后)你应该检查一些事情:
- 您的重定向 uri 是否与 DashBoard 中的相同,是否以正确的格式 (https://example.com/callback/) 编写,我在那里犯了一个错误 - 我在 [=33 中有 'redirect_uri 参数=]self.query 因为 'andriime.github.com/pc/' 而不是 'https://andriime.github.io/pc/'(同样重要的是要记住没有任何 github.com,只有 github.io,所以正确 link 正确进入仪表板)
2."response_type" 在你的 params (requests 输入)应该等于 'code'
- 在此之后,你应该得到一个 link 你的请求(我没有找到如何完美地做到这一点,所以只写了这个:
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”
然后您只需将 link 复制并粘贴到浏览器中,然后单击一些“接受”按钮。在此之后,您将被重定向到您粘贴为 'redirect_uri' 的页面,然后您应该在浏览器中单击 link,您应该会在“redirect_uri 之后看到“代码”参数".
我知道,这部分有点复杂,但是你应该看看我上面 link 编的视频,它会很有用并且更容易理解
那你直接复制我的第二部分代码就可以使用了。但是,当然,改变参数。
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)
这个答案还可以改进很多,所以我很想看到你的反馈
或此处的其他答案,使此方法更简单、更美观
我想创建一个应用程序,将一些歌曲添加到 Spotify 播放列表。所以使用 Spotipy(Python 库)来解决它可能是个好主意。
要将歌曲添加到播放列表,我需要知道它的 URI。要知道它的 URI,我应该使用名为 search (https://spotipy.readthedocs.io/en/2.19.0/#spotipy.client.Spotify.search). It requires some inputs and one of them is Authorization, which requires access token (link for docs https://developer.spotify.com/documentation/web-api/reference/#category-search). Then I used Authorization Guide from Spotify to authorize(link for 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是环境变量,我在上面定义了它们(我没有 post 这段代码)。我的第 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":"无效授权码"}。 Whosebug 上有一个答案,但它对我不起作用 (How to fix 'error: invalid_grant Invalid authorization code' when asking for reshresh_token from Spotify API?),因为我没有犯那里写的那个错误。
Spotify community forum 上也有答案,但是那里没有答案。在另一个论坛上有一个问题,但也没有回答
链接:
2.https://developer.salesforce.com/forums/?id=906F00000009B2AIAU)
所以再次请你回答你是否知道它应该如何工作。非常感谢!
好的,我知道怎么做了。这个视频对我很有帮助 (https://www.youtube.com/watch?v=yAXoOolPvjU),但是它是关于 javascript,但概念是一样的。
在第一步之后(在得到 self.info_code 响应之后)你应该检查一些事情:
- 您的重定向 uri 是否与 DashBoard 中的相同,是否以正确的格式 (https://example.com/callback/) 编写,我在那里犯了一个错误 - 我在 [=33 中有 'redirect_uri 参数=]self.query 因为 'andriime.github.com/pc/' 而不是 'https://andriime.github.io/pc/'(同样重要的是要记住没有任何 github.com,只有 github.io,所以正确 link 正确进入仪表板)
2."response_type" 在你的 params (requests 输入)应该等于 'code'
- 在此之后,你应该得到一个 link 你的请求(我没有找到如何完美地做到这一点,所以只写了这个:
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”
然后您只需将 link 复制并粘贴到浏览器中,然后单击一些“接受”按钮。在此之后,您将被重定向到您粘贴为 'redirect_uri' 的页面,然后您应该在浏览器中单击 link,您应该会在“redirect_uri 之后看到“代码”参数".
我知道,这部分有点复杂,但是你应该看看我上面 link 编的视频,它会很有用并且更容易理解
那你直接复制我的第二部分代码就可以使用了。但是,当然,改变参数。
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)
这个答案还可以改进很多,所以我很想看到你的反馈 或此处的其他答案,使此方法更简单、更美观