team-9/backend/endpoints/spotify_api.py
2025-08-02 04:21:13 +02:00

51 lines
1.7 KiB
Python

from fastapi import APIRouter, Request, Depends
from fastapi.responses import RedirectResponse
import requests
import os
from auth.session import SessionData, SessionManager
music_router = APIRouter(prefix="/music")
SPOTIFY_CLIENT_ID = os.getenv("SPOTIFY_CLIENT_ID")
SPOTIFY_CLIENT_SECRET = os.getenv("SPOTIFY_CLIENT_SECRET")
SPOTIFY_REDIRECT_URI = os.getenv("HOST") + "/music/callback"
SPOTIFY_AUTH_URL = "https://accounts.spotify.com/authorize"
SPOTIFY_TOKEN_URL = "https://accounts.spotify.com/api/token"
SPOTIFY_PLAY_URL = "https://api.spotify.com/v1/me/player/play"
# Step 1: Redirect user to Spotify login
@music_router.get("/login")
def login():
scope = "user-modify-playback-state user-read-playback-state"
url = (
f"{SPOTIFY_AUTH_URL}?response_type=code"
f"&client_id={SPOTIFY_CLIENT_ID}"
f"&scope={scope}"
f"&redirect_uri={SPOTIFY_REDIRECT_URI}"
)
return RedirectResponse(url)
# Step 2: Callback to get access token
@music_router.get("/callback")
def callback(code: str):
payload = {
"grant_type": "authorization_code",
"code": code,
"redirect_uri": SPOTIFY_REDIRECT_URI,
"client_id": SPOTIFY_CLIENT_ID,
"client_secret": SPOTIFY_CLIENT_SECRET,
}
response = requests.post(SPOTIFY_TOKEN_URL, data=payload)
token_info = response.json()
access_token = token_info.get("access_token")
refresh_token = token_info.get("refresh_token")
expires_in = token_info.get("expires_in")
# Salva access_token in sessione o database per usi futuri
SessionManager.instance().set_session(SessionData(access_token, refresh_token, expires_in))
return {}
@music_router.get("/search")
def search(query: str):
pass