Spotify 刷新令牌 Python

Posted

技术标签:

【中文标题】Spotify 刷新令牌 Python【英文标题】:Spotify Refresh Token Python 【发布时间】:2021-07-19 09:24:14 【问题描述】:

我有一个 python 程序可以返回我当前正在听的任何歌曲。我从 Spotify API 获得的访问令牌仅持续一个小时,我无法找到一种在我的代码中实现刷新令牌的简单方法。

    SPOTIFY_GET_CURRENT_TRACK_URL = 'https://api.spotify.com/v1/me/player'
SPOTIFY_ACCESS_TOKEN = 'BQBQMLkkLb6az9TRv-PDXFFcm4KHrofc67H12Uzs3FXaPWHETy4ivnC-WGu2Jg5wlZ_yhggGypiO0Gnv_QkNGkefTuCjNR_Tzjw4pv2W9f_9_D7-LfD2W5KVPzh2DxMmf9TNPpSn200D_Xd4AD8F_MeJc-DIlA'

#Method to return the info for the currently playing track
def get_current_track():
    response = requests.get(
        SPOTIFY_GET_CURRENT_TRACK_URL,
        headers = 
            "Authorization": f"Bearer SPOTIFY_ACCESS_TOKEN"
        
    )
    resp_json = response.json()

    track_id = resp_json['item']['id']
    track_name = resp_json['item']['name']
    artists = resp_json['item']['artists']
    artists_name = ', '.join(
        [artist['name'] for artist in artists]
    )
    link = resp_json['item']['external_urls']['spotify']

    current_track_info = 
        "id" : track_id,
        "name" : track_name,
        "artists" : artists_name,
        "link" : link
    

    return current_track_info

【问题讨论】:

【参考方案1】:

这是一个很棒的 youtube 教程,回答了我所有的问题 https://youtu.be/-FsFT6OwE1A

【讨论】:

嘿,我遇到了和你一样的问题,我想做的是,从流媒体历史开始,获取歌曲的特征,如节奏、响度等......你能给我一些建议吗? Shadows1996 - 你试过这个端点吗? developer.spotify.com/console/get-audio-features-track/… 不,这是我第一次使用 spotify api。到目前为止,我所做的是从收听历史开始获取歌曲的特征,但是如果我的收听历史非常大,令牌就会过期。 因此您可能希望在每 x 次使用后刷新令牌。每次我的程序进行新的 API 调用时,我都会刷新令牌 如何刷新?使用发布请求?【参考方案2】:

如何使用一个类来保留令牌,然后在它陈旧时再次请求?像这样的:

class SpotifyTracker:
    TRACK_URL = 'https://api.spotify.com/v1/me/player'

    def __init__(self):
        self._token = self._set_token()

    def _set_token(self):
        # ... logic to set token

    def _request_track_data(self):
        return requests.get(
            self.TRACK_URL,
            headers=
                "Authorization": f"Bearer self._token"
            
        )

    def get_current_track(self):
        response = self._request_track_data() 
        if response.code == 401:
            self._set_token()
            response = self._request_track_data()
        resp_json = response.json()
        ...
        return current_track_info

【讨论】:

我遇到的问题实际上是刷新令牌。现在我用的是 Spotify 的一个临时的,它只持续一个小时。 也许您可以发布一些有关您如何尝试获取令牌的信息?如果你能以一个小时的自动化方式获得它,你不能只做上面的事情吗?即在 http 401 上自动重新获取它 所以现在我正在使用来自 Spotify 的临时 Auth Token。 Spotify 有一个授权代码流,但我不知道如何在我的代码中使用它。 developer.spotify.com/documentation/general/guides/…

以上是关于Spotify 刷新令牌 Python的主要内容,如果未能解决你的问题,请参考以下文章

如何获得一个无限期使用的访问令牌/刷新令牌(oauth2 - Spotify API)

使用客户端凭据流刷新 spotify 令牌

Spotify SDK 缺少令牌刷新服务?

带有 Spotify 的 OAuth 无法使用 curl 获取刷新令牌

Spotify API 访问和刷新令牌

如何在 Spotify SDK for Android 上刷新访问令牌?