spotifyapi / app.py
Chrunos's picture
Update app.py
8fc575b verified
raw
history blame
1.68 kB
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
}