Django授权的Spotipy,无需复制粘贴到控制台。

问题描述 投票:1回答:1

我有一个Django网站,我想用spotipy来查找歌曲的统计信息,比如人气和浏览量。我现在有这段代码。

import spotipy
import spotipy.util as util #luxury
import json
import webbrowser

username = 'dgrqnco2rx8hdu58kv9if9eho'
scope = 'user-read-private user-read-playback-state user-modify-playback-state'

token = util.prompt_for_user_token(username, scope, client_id='08bb526962574a46b359bffc56048147',
                                       client_secret='bf6d4184c8ae40aca207714e02153bad', redirect_uri='http://google.com/')

sp_obj = spotipy.Spotify(auth=token)
ss = 'name of song'
if ss.__contains__('('):
    q = ss[0:ss.index('(')]
elif ss.__contains__('['):
    q = ss[0:ss.index('[')]
elif ss.__contains__('['):
    q = ss[0:ss.index('{')]
else:
    q = ss
query = sp_obj.search(q, 1, 0, 'track')

#<<<<<<<<<<SONG>>>>>>>>>>

#FIND THE SONG URI
song_uri = query['tracks']['items'][0]['uri']

track = sp_obj.track(song_uri)
track_data = sp_obj.audio_features(song_uri)

song_popularity = track['popularity']
song_danceability = track_data[0]['danceability']
song_energy = track_data[0]['energy']
song_loudness = track_data[0]['loudness']
song_tempo = track_data[0]['tempo']

但是spotipy会把我重定向到一个授权页面 我需要在控制台粘贴网址 然而普通用户无法访问这个控制台。那么我怎样才能以另一种方式进行授权,甚至绕过它呢?

我在想弄一个spotify账号,每个用户都会登录,这样用户就不用做授权,也不用有spotify账号。这可能吗?如果不可能,我还可以尝试什么?

django authorization spotify spotipy
1个回答
0
投票

你不能使用 util.prompt_for_user_token 因为它只是一个仅供本地使用的助手。

你需要把你的代码安排成API端点,以便多个用户可以登录。下面是一个完整的工作示例,它将允许多个用户登录。https:/github.comamerespotipyblobmasterexamplesapp.py。.

它使用Flask,但你可以很容易地适应Django。

@app.route('/')
def index():
    if request.args.get("code"):
        session['token_info'] = auth_manager.get_access_token(request.args["code"])
        return redirect('/')

    if not session.get('token_info'):
        auth_url = auth_manager.get_authorize_url()
        return f'<h2><a href="{auth_url}">Sign in</a></h2>'

    return f'<h2>Hi {spotify.me()["display_name"]}, ' \
           f'<small><a href="/sign_out">[sign out]<a/></small></h2>' \
           f'<a href="/playlists">my playlists</a>'


@app.route('/sign_out')
def sign_out():
    session.clear()
    return redirect('/')

@app.route('/playlists')
def playlists():
    if not session.get('token_info'):
        return redirect('/')
    else:
        return spotify.current_user_playlists()
© www.soinside.com 2019 - 2024. All rights reserved.