GitHub Actions工作流中Spotify API授权卡住问题:如何仅用API凭证获取最近播放曲目?
哥们,我之前也碰到过一模一样的问题!GitHub Actions这种无界面后台环境里,用普通的授权码流程肯定会卡壳,毕竟没法弹出浏览器让你手动点授权。不过咱们可以靠**刷新令牌(Refresh Token)**解决,只需要在本地授权一次,之后Actions就能自动跑起来,再也不用手动干预了。
先给你理清楚为啥当前方案在Actions里行不通:你现在用的是Spotify的「授权码流程(Authorization Code Flow)」,这个流程必须要用户通过浏览器登录验证,GitHub Actions是后台静默运行的,没有交互界面,自然就一直卡在等授权的步骤——本地能跑完全是因为你能操作浏览器完成授权。
下面是具体的解决步骤,一步步来就行:
1. 本地生成持久化的刷新令牌
先修改你本地的Spotipy初始化代码,加上cache_path参数让授权信息存在本地文件里:
import os import spotipy from spotipy.oauth2 import SpotifyOAuth spotify_client_id = os.environ["SPOTIFY_CLIENT_ID"] spotify_client_secret = os.environ["SPOTIFY_CLIENT_SECRET"] sp = spotipy.Spotify( auth_manager=SpotifyOAuth( scope="user-read-recently-played", client_id=spotify_client_id, client_secret=spotify_client_secret, redirect_uri="http://127.0.0.1:8080/callback", cache_path=".cache" # 新增:把授权缓存存到本地文件 ) ) # 调用任意接口触发授权流程,比如获取最近播放 recent_tracks = sp.current_user_recently_played(limit=5) print(recent_tracks)
运行这段代码,会弹出浏览器让你完成授权,结束后本地会生成一个.cache文件。打开这个文件,找到refresh_token对应的字符串,把它复制下来备用。
2. 把凭证配置到GitHub Secrets
登录你的GitHub仓库,进入「Settings」→「Secrets and variables」→「Actions」,添加三个保密变量:
SPOTIFY_CLIENT_ID:你的Spotify客户端IDSPOTIFY_CLIENT_SECRET:你的Spotify客户端密钥SPOTIFY_REFRESH_TOKEN:刚才从.cache文件里复制的刷新令牌
3. 修改Actions里的代码,用刷新令牌自动授权
把原来的Spotipy初始化代码改成下面这样,用刷新令牌跳过手动授权步骤:
import os import spotipy from spotipy.oauth2 import SpotifyOAuth spotify_client_id = os.environ["SPOTIFY_CLIENT_ID"] spotify_client_secret = os.environ["SPOTIFY_CLIENT_SECRET"] spotify_refresh_token = os.environ["SPOTIFY_REFRESH_TOKEN"] sp = spotipy.Spotify( auth_manager=SpotifyOAuth( scope="user-read-recently-played", client_id=spotify_client_id, client_secret=spotify_client_secret, redirect_uri="http://127.0.0.1:8080/callback", refresh_token=spotify_refresh_token, show_dialog=False # 禁止弹出授权对话框 ) ) # 现在就能正常获取最近播放曲目了 recent_tracks = sp.current_user_recently_played(limit=5) for item in recent_tracks['items']: track = item['track'] print(f"最近播放:{track['name']} - {track['artists'][0]['name']}")
原理说明
刷新令牌是Spotify颁发的长期有效凭证(除非你在Spotify账户里手动撤销这个应用的授权),它可以自动获取新的访问令牌,完全不需要用户再手动登录验证。这样GitHub Actions就能在后台自动完成授权流程,顺利拿到你的最近播放数据了。
备注:内容来源于stack exchange,提问作者Azeem Idrisi

