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
        
    }