2025-01-12 04:08:05 +01:00

61 lines
2.1 KiB
Python

import requests
import warnings
class Api:
def __init__(self, refresh_token: str, base_64: str):
self.refresh_token = refresh_token
self.base_64 = base_64
self.access_token = None
self.header = None
def refreshAuth(self) -> None:
uri = "https://accounts.spotify.com/api/token"
data = {
"grant_type": "refresh_token",
"refresh_token": self.refresh_token,
}
req = requests.post(
uri, data=data, headers={"Authorization": "Basic " + self.base_64}
).json()
self.access_token = req["access_token"]
self.header = {"Authorization": f"Bearer {self.access_token}"}
return req["expires_in"]
def getPlaying(self):
url = "https://api.spotify.com/v1/me/player/currently-playing"
req = requests.get(url, headers=self.header)
if req.status_code == 204:
return "not-playing"
if req.status_code == 401:
warnings.warn("API Error: Bad or Expired token")
elif req.status_code == 403:
warnings.warn("API Error: Bad OAuth request, re-authenticating won't help")
elif req.status_code == 429:
warnings.warn("API Error: API rate limit exceeded")
elif req.status_code != 200:
warnings.warn(f"{req.status_code},\n{req.content}")
return None
return self._format_req(req.json())
def _format_req(self, r):
if not r["is_playing"] or r["currently_playing_type"] != "track":
return "not-playing"
item, album = r["item"], r["item"]["album"]
res = {
"progress_ms": r["progress_ms"],
"duration_ms": item["duration_ms"],
"track": item["name"],
"album": album["name"],
"artists": [artist["name"] for artist in item["artists"]],
"img_url": None,
}
img_urls = album.get("images", [])
if img_urls:
res["img_url"] = img_urls.pop()["url"]
else:
warnings.warn(
f"{res['track']} - {res['artists']}\nAlbum art can't be found\n{img_urls}"
)
return res