我已经使用Spotipy创建了一个简单的Python程序,该程序基于在用户设备中下载的曲目显示了一些推荐的曲目。但是我在使程序变得易于使用时遇到了一些麻烦。
首先,例如通过将我的代码上传到GitHub与用户共享我的客户ID和我的客户机密是否有问题?是否可以将重定向URI用作http://localhost/,还是应该出于安全目的而为我的程序创建一个网站?在“用户名”字段中,它应该是要分析的帐户的用户名,也可以是"Brian Rogers"
之类的任何内容?
在身份验证部分,它在Python控制台中向用户显示以下消息:
User authentication requires interaction with your
web browser. Once you enter your credentials and
give authorization, you will be redirected to
a url. Paste that url you were directed to to
complete the authorization.
Opening https://... in your browser
Enter the URL you were redirected to:
我的问题是:由于我要使用Tkinter,如何将输入从Tkinter输入框重定向到Python控制台?
最后,认证令牌过期需要多长时间?如果是这样,如何进行更新(如果可能的话,以便只有当用户首次运行该程序时才可以输入)?
提前感谢患者!
答案 0 :(得分:1)
我将一一解答您所有的问题。
例如通过将我的代码上传到GitHub与用户共享我的客户ID和我的客户机密是否有问题?
一个人应该始终避免在源中放入个人证书。如果有人滥用您的凭据,您将成为负有责任的人,因为他们是您的凭据。无论如何,我能想到的唯一灾难是将垃圾邮件请求发送到Spotify API,我相信Spotify的API已经具有保护功能,并且如果检测到垃圾邮件,它将丢弃进一步的请求。我已经看到一些项目通过在源代码中创建用于为其项目生成API凭证的特殊帐户来放置其Spotify和YouTube API凭证,并推送到GitHub以使该工具易于设置使用。
我可以将重定向URI用作http://localhost/,还是应该出于安全目的而为我的程序创建一个网站?在“用户名”字段中,它应该是要分析的帐户的用户名,或者可以是诸如“ Brian Rogers”之类的任何内容?
由于您仅在Spotify上搜索相关曲目,因此我相信您可能不需要访问所使用凭据的Spotify用户的个人信息。如果是这样,可以通过使用username
来授权自己,避免同时通过oauth2.SpotifyClientCredentials
和验证重定向URI:
import spotipy
import spotipy.oauth2 as oauth2
credentials = oauth2.SpotifyClientCredentials(
client_id=client_id,
client_secret=client_secret)
token = credentials.get_access_token()
# This won't prompt for verification of Redirect URI
sp = spotipy.Spotify(auth=token)
我的问题是:由于我要使用Tkinter,如何将输入从Tkinter输入框重定向到Python控制台?
如果您如上所述使用oauth2.SpotifyClientCredentials
,则不需要。
最后,认证令牌过期需要多长时间?如果是这样,如何进行更新(如果可能的话,以便只有当用户首次运行该程序时才可以输入)?
在撰写本文时,令牌一直有效一小时。您可以通过检查credentials.token_info["expires_in"]
的值(以秒为单位显示时间)来确认。
此外,当调用了依赖方法但令牌已过期时,spotipy引发spotipy.client.SpotifyException
。因此,您可以捕获此异常并用新实例覆盖以前的spotipy.client.Spotify
实例。至少您会执行以下操作:
import spotipy
import spotipy.oauth2 as oauth2
def authenticate_calls():
credentials = oauth2.SpotifyClientCredentials(
client_id=client_id,
client_secret=client_secret,
)
token = credentials.get_access_token()
sp = spotipy.Spotify(auth=token)
return sp
sp = authenticate_calls()
try:
do_something_that_needs_authentication(sp)
except spotipy.client.SpotifyException:
sp = authenticate_calls()
do_something_that_needs_authentication(sp)
您还可以创建一个装饰器函数,该函数将在令牌过期时刷新令牌并用其装饰函数!