- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Spotipy 创建了一个简单的 Python 程序,该程序根据用户设备中下载的轨道显示一些推荐的轨道。但我在使程序变得用户友好方面遇到了一些麻烦。
首先,通过将我的代码上传到 GitHub 等方式与用户共享我的客户端 ID 和客户端 key 是否有任何问题?我可以使用重定向 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 控制台?
最后,身份验证 token 需要多长时间才会过期?如果是这样,如何更新它(如果可能的话,这样只有用户第一次运行程序时才进入)?
提前感谢患者!
最佳答案
我会一一解答您的所有问题。
is there any problem by sharing my Client ID and my Client Secret with the user by, for example, uploading my code in GitHub?
应始终避免将个人凭据放入源中。如果有人滥用您的凭据,您将承担责任,因为它们是您的凭据。无论如何,我能想象到的唯一可能造成的破坏就是向 Spotify 的 API 发送垃圾邮件请求,我相信 Spotify 的 API 已经有了保护措施,如果检测到垃圾请求,将会丢弃进一步的请求。我已经看到一些项目通过创建特殊帐户来为其项目生成 API 凭据,将其 Spotify 和 YouTube API 凭据放入其源代码中,并推送到 GitHub,以使该工具更易于设置和使用。
Can I use Redirect URI as being http://localhost/ or should I create a website for my program for securing purposes? In Username field, it should be the username of the account to be analyzed or it can be anything, like "Brian Rogers"?
由于您只是在 Spotify 上搜索相关轨道,因此我相信您可能不需要访问您正在使用其凭据的 Spotify 用户的个人信息。如果是这样,您可以使用 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)
My question is: since I'm managing to use Tkinter, how can I redirect the input from the Tkinter input box to the Python console?
如果您使用上面提到的 oauth2.SpotifyClientCredentials
,则不需要。
Finally, how long does the authentication token take to expire? And if so, how to renew it (if possible, so that only the user enters when they run the program for the first time)?
截至撰写本文时, token 的有效期恰好为一小时。您可以通过检查 credentials.token_info["expires_in"]
的值进行确认,该值显示时间(以秒为单位)。
此外,当调用依赖方法但 token 已过期时,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)
您还可以创建一个装饰器函数,如果 token 过期,它将刷新 token 并用它装饰您的函数!
关于python - 使 Spotipy 程序变得用户友好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674952/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!