【问题标题】:spotipy authorization code flowspotipy 授权码流程
【发布时间】:2014-10-31 22:22:14
【问题描述】:

我正在使用 Spotipy python 库与 Spotify web api 交互。我已经完成了 API 和文档,但我没有看到一个清楚的示例来说明该库如何支持授权代码流 (https://developer.spotify.com/web-api/authorization-guide/#authorization-code-flow)。

【问题讨论】:

    标签: python oauth-2.0 spotify spotipy


    【解决方案1】:

    我在 Spotipy 的帮助下实现了一个简单的授权代码流程。也许这对其他人也有帮助。也在github上:https://github.com/perelin/spotipy_oauth_demo

    代码如下:

    from bottle import route, run, request
    import spotipy
    from spotipy import oauth2
    
    PORT_NUMBER = 8080
    SPOTIPY_CLIENT_ID = 'your_client_id'
    SPOTIPY_CLIENT_SECRET = 'your_client_secret'
    SPOTIPY_REDIRECT_URI = 'http://localhost:8080'
    SCOPE = 'user-library-read'
    CACHE = '.spotipyoauthcache'
    
    sp_oauth = oauth2.SpotifyOAuth( SPOTIPY_CLIENT_ID, SPOTIPY_CLIENT_SECRET,SPOTIPY_REDIRECT_URI,scope=SCOPE,cache_path=CACHE )
    
    @route('/')
    def index():
    
        access_token = ""
    
        token_info = sp_oauth.get_cached_token()
    
        if token_info:
            print "Found cached token!"
            access_token = token_info['access_token']
        else:
            url = request.url
            code = sp_oauth.parse_response_code(url)
            if code:
                print "Found Spotify auth code in Request URL! Trying to get valid access token..."
                token_info = sp_oauth.get_access_token(code)
                access_token = token_info['access_token']
    
        if access_token:
            print "Access token available! Trying to get user information..."
            sp = spotipy.Spotify(access_token)
            results = sp.current_user()
            return results
    
        else:
            return htmlForLoginButton()
    
    def htmlForLoginButton():
        auth_url = getSPOauthURI()
        htmlLoginButton = "<a href='" + auth_url + "'>Login to Spotify</a>"
        return htmlLoginButton
    
    def getSPOauthURI():
        auth_url = sp_oauth.get_authorize_url()
        return auth_url
    
    run(host='', port=8080)
    

    【讨论】:

    • 嗨,谢谢你的例子。你知道如何刷新令牌吗?
    【解决方案2】:

    如果有人需要这里的工作代码是我目前的。

    记得改一下client_id等,我把它们放在config.py里。

    import spotipy
    import spotipy.util as util
    from config import CLIENT_ID, CLIENT_SECRET, PLAY_LIST, USER
    import random
    
    token = util.oauth2.SpotifyClientCredentials(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
    
    cache_token = token.get_access_token()
    spotify = spotipy.Spotify(cache_token)
    
    results1 = spotify.user_playlist_tracks(USER, PLAY_LIST, limit=100, offset=0)
    

    【讨论】:

      【解决方案3】:

      当我尝试这样做时,不幸的是,这些答案都没有真正让我到达那里。当我最终弄清楚时,我在这篇文章中详细说明了如何:https://stackoverflow.com/a/42443878/2963703 我使用 Django 作为我的后端,但所有 spotify api oauth 的东西都是用 javascript 完成的,所以它对你应该仍然非常有用。

      【讨论】:

        【解决方案4】:

        Spotipy 库支持授权代码流程,如文档 here 所述。如需更多信息,您还可以查看 Spotipy 的 oAuth2 moduleUtil module

        【讨论】:

          猜你喜欢
          • 2018-08-20
          • 2017-05-28
          • 2021-12-22
          • 2022-01-06
          • 2014-11-04
          • 2016-10-15
          • 2022-12-16
          • 2022-08-21
          • 1970-01-01
          相关资源
          最近更新 更多