Spaces:
Running
Running
File size: 1,680 Bytes
7a5a781 29b1bc0 7a5a781 8fc575b 7a5a781 8fc575b 7a5a781 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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']
@app.get("/get-track")
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
}
|