Implement spotify api and setup polling dashboard

This commit is contained in:
Shav Kinderlehrer 2024-06-23 00:27:30 -04:00
parent 659fb7ad43
commit 33925635cb
5 changed files with 64 additions and 2 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.env.sh
venv/
.cache

View File

@ -1,17 +1,25 @@
from weather import Weather
import json
from clock import Clock
from spotify import Spotify
from time import sleep
def main():
weather_manager = Weather()
weather_manager.start_update_loop()
clock_manager = Clock()
spotify_manager = Spotify()
weather_manager.start_update_loop()
clock_manager.start_update_loop()
spotify_manager.start_update_loop()
while True:
print(clock_manager.time)
print(weather_manager.weather["data"]["values"]["temperature"])
print(f'{weather_manager.weather["data"]["values"]["temperature"]} degrees')
print(f"{spotify_manager.current_context_name}\n{spotify_manager.song_name} - {', '.join(spotify_manager.song_artists)}\n{spotify_manager.song_played / 1000} / {spotify_manager.song_length / 1000}")
print()
sleep(10)

53
src/spotify.py Normal file
View File

@ -0,0 +1,53 @@
import spotipy
from spotipy.oauth2 import SpotifyOAuth
from time import sleep
import threading
class Spotify:
def __init__(self):
self.sp = self.authenticate()
self.set_values()
pass
def authenticate(self):
scope = ["user-read-playback-state", "user-modify-playback-state", "user-read-currently-playing", "user-read-playback-position", "user-library-modify"]
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(scope=scope))
return sp
def set_values(self):
song = self.sp.current_playback()
self.currently_playing = song
if song:
self.current_context = song["context"]["type"]
self.current_context_uri = song["context"]["uri"]
self.set_context()
self.song_artists = []
for artist in song["item"]["artists"]:
self.song_artists.append(artist["name"])
self.song_name = song["item"]["name"]
self.song_length = song["item"]["duration_ms"]
self.song_played = song["progress_ms"]
def set_context(self):
if self.current_context == "artist":
artist = self.sp.artist(self.current_context_uri)
if artist:
self.current_context_name = artist["name"]
if self.current_context == "playlist":
playlist = self.sp.playlist(self.current_context_uri)
if playlist:
self.current_context_name = playlist["name"]
if self.current_context == "album":
album = self.sp.album(self.current_context_uri)
if album:
self.current_context_name = album["name"]
def start_update_loop(self):
thread = threading.Thread(target=self.update_loop)
thread.daemon = True
thread.start()
def update_loop(self):
while True:
sleep(5)
self.set_values()