Files
muzak/playlist/spotify.py
T
mark 7f199b6886 Nomineren even opgeleukt
En spotify.link shortlinks worden geaccepteerd. Mogelijk.
2024-02-25 00:20:44 +01:00

54 lines
1.6 KiB
Python

import requests
import os
import re
from datetime import datetime, timedelta
from dotenv import load_dotenv
load_dotenv()
class Spotify():
def __init__(self):
self.token = None
self.valid_until = None
def token_valid(self):
if self.token and self.valid_until and (datetime.now() < self.valid_until):
return True
return False
def get_token(self):
if self.token_valid():
print("Token still valid")
return self.token
print("New token")
url = 'https://accounts.spotify.com/api/token'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + os.getenv('SPOTIFY_ENCODED_ID')
}
data = {
'grant_type': 'client_credentials'
}
r = requests.post(url, headers=headers, data=data)
data = r.json()
self.token = data["access_token"]
self.valid_until = datetime.now() + timedelta(seconds=data["expires_in"]-300)
return self.token
def unshort(self, url):
"""Converts a spotify.link url into a normal spotify ID"""
r = requests.get(url, allow_redirects=False)
r.raise_for_status()
return r.headers["Location"]
def get_song_info(self, spotify_id):
token = self.get_token()
url = 'https://api.spotify.com/v1/tracks/' + spotify_id
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
}
r = requests.get(url, headers=headers)
r.raise_for_status()
return r.json()