Spaces:
Running
Running
from fastapi import FastAPI, HTTPException, Request | |
import requests | |
from bs4 import BeautifulSoup | |
import os | |
import base64 | |
app = FastAPI() | |
SPOTIFY_API_URL = "https://api.spotify.com/v1" | |
SPOTIFY_CLIENT_ID = os.getenv("SPOTIFY_CLIENT_ID") | |
SPOTIFY_CLIENT_SECRET = os.getenv("SPOTIFY_CLIENT_SECRET") | |
def get_spotify_token(): | |
auth_response = requests.post( | |
'https://accounts.spotify.com/api/token', | |
data = { | |
'grant_type': 'client_credentials' | |
}, | |
headers = { | |
'Authorization': f'Basic {base64.b64encode(f"{SPOTIFY_CLIENT_ID}:{SPOTIFY_CLIENT_SECRET}".encode()).decode()}' | |
} | |
) | |
auth_response_data = auth_response.json() | |
return auth_response_data['access_token'] | |
def get_track(request: Request, track_id: str = None, track_url: str = None): | |
if not track_id and not track_url: | |
raise HTTPException(status_code=400, detail="Track ID or Track URL must be provided") | |
access_token = get_spotify_token() | |
headers = { | |
"Authorization": f"Bearer {access_token}" | |
} | |
if track_url: | |
track_id = track_url.split("/")[-1] | |
response = requests.get(f"{SPOTIFY_API_URL}/tracks/{track_id}", headers=headers) | |
track_data = response.json() | |
respone = requests.get(f"https://downspotifyapis.vercel.app/api/v2/track/${track_id}") | |
url = respone.json().url | |
return { | |
"name": track_data["name"], | |
"album": track_data["album"]["name"], | |
"artist": track_data["artists"][0]["name"], | |
"release_date": track_data["album"]["release_date"], | |
"duration_ms": track_data["duration_ms"], | |
"url": url | |
} | |