我正在使用 nodemcu esp8266,计划是发出一个 spotify api 请求来自动播放一些歌曲,我有一个功能齐全的 python 脚本可以做到这一点,但是当我试图将它转换为 upython 时它失败了。我现在已经花了几个小时,并且发现问题是由于某种原因 urequest 仅适用于特定网站,例如,如果我尝试:
import urequests as requests
x = requests.get('https://www.spotify.com')
print(x.status_code)
我得到一个 302
但是当我尝试时:
import urequests as requests
x = requests.get('https://www.google.com')
print(x.status_code)
我得到了 200。这个问题存在于几个网站并且没有有效响应我的 urequests.put 命令没有返回我需要的东西......有什么想法可以解决它吗?先感谢您。
这是我要运行的代码:
import urequests as requests
import ujson as json
refresh_token = "xxxxx"
base_64 = "xxxxx"
class Refresh:
def __init__(self):
self.refresh_token = refresh_token
self.base_64 = base_64
def refresh(self):
query = "https://accounts.spotify.com/api/token"
payload={"grant_type": "refresh_token", "refresh_token": refresh_token}
headers={'Authorization': 'Basic %s' % base_64}
data = (json.dumps(payload)).encode()
response = requests.post(query,
data=data,
headers=headers)
print(response.status_code)
print(response.reason)
a = Refresh()
a.refresh()
这里有几件事会导致你的问题。
首先,您尝试将 JSON 数据发送到/api/token
端点:
data = (json.dumps(payload)).encode()
response = requests.post(query,
data=data,
headers=headers)
...但根据文档,此端点不包括application/x-www-form-urlencoded
数据。
其次,虽然文档建议您需要发送一个基本Authorization
标头,但在我今晚的实验中,我无法让它工作......但如果我在其中包含客户端 ID 和密码,我能够成功刷新令牌请求正文。
你可以在这里看到我的论坛帖子,里面有这个问题。
考虑到这一点,以下代码似乎适用于我运行 micropython 1.18 的 esp8266:
import urequests as requests
refresh_token = "..."
client_id = "..."
client_secret = "..."
class Refresh:
def __init__(self, refresh_token, client_id, client_secret):
self.refresh_token = refresh_token
self.client_id = client_id
self.client_secret = client_secret
def refresh(self):
url = "https://accounts.spotify.com/api/token"
data = "&".join(
[
"grant_type=refresh_token",
f"refresh_token={self.refresh_token}",
f"client_id={self.client_id}",
f"client_secret={self.client_secret}",
]
)
headers = {
"content-type": "application/x-www-form-urlencoded",
}
response = requests.post(url, data=data, headers=headers)
print(data)
print(response.status_code)
print(response.reason)
print(response.text)
a = Refresh(refresh_token, client_id, client_secret)
a.refresh()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句