[Python] How do i refresh the data of the user that was initially logged in to spotify for my...

Discussão em 'Python' iniciado por Stack, Setembro 30, 2024.

  1. Stack

    Stack Membro Participativo

    I have a Flask application developed using Spotipy and OAuth, where i will fetch the current liked songs of a spotify account, the problem is that for some reason the data for only one user is being used, regardless of who i log into spotiify. How can i refresh the saved account data?

    I'll share the entire code:

    import spotipy
    from spotipy.oauth2 import SpotifyOAuth
    from flask import Flask, url_for, session, request, redirect
    import json
    import time
    import pandas as pd

    # App config
    app = Flask(__name__)

    app.secret_key = 'SOMETHING-RANDOM'
    app.config['SESSION_COOKIE_NAME'] = 'spotify-login-session'

    @app.route('/')
    def login():
    session.clear()
    sp_oauth = create_spotify_oauth()
    auth_url = sp_oauth.get_authorize_url()
    return redirect(auth_url)

    @app.route('/authorize')
    def authorize():
    sp_oauth = create_spotify_oauth()
    session.clear()
    code = request.args.get('code')
    token_info = sp_oauth.get_access_token(code)
    session["token_info"] = token_info
    return redirect("/getTracks")

    @app.route('/logout')
    def logout():
    for key in list(session.keys()):
    session.pop(key)
    return redirect('/')

    @app.route('/getTracks')
    def get_all_tracks():
    session['token_info'], authorized = get_token()
    session.modified = True
    if not authorized:
    return redirect('/')
    sp = spotipy.Spotify(auth=session.get('token_info').get('access_token'))
    user = sp.current_user()
    results = []
    iter = 0
    while True:
    offset = iter * 50
    iter += 1
    curGroup = sp.current_user_saved_tracks(limit=50, offset=offset)['items']
    for idx, item in enumerate(curGroup):
    track = item['track']
    val = track['name'] + " - " + track['artists'][0]['name']
    results += [val]
    if (len(curGroup) < 50):
    break

    df = pd.DataFrame(results, columns=["song names"])
    df.to_csv('songs.csv', index=False)
    return user


    # Checks to see if token is valid and gets a new token if not
    def get_token():
    token_valid = False
    token_info = session.get("token_info", {})

    # Checking if the session already has a token stored
    if not (session.get('token_info', False)):
    token_valid = False
    return token_info, token_valid

    # Checking if token has expired
    now = int(time.time())
    is_token_expired = session.get('token_info').get('expires_at') - now < 60

    # Refreshing token if it has expired
    if (is_token_expired):
    sp_oauth = create_spotify_oauth()
    token_info = sp_oauth.refresh_access_token(session.get('token_info').get('refresh_token'))

    token_valid = True
    return token_info, token_valid


    def create_spotify_oauth():
    return SpotifyOAuth(
    client_id="id",
    client_secret="secret",
    redirect_uri='http://127.0.0.1:5000/authorize',
    scope="user-library-read")

    Continue reading...

Compartilhe esta Página