Spotify / heatmap.py
sbrandeis's picture
sbrandeis HF staff
hotfix
8cecaef verified
from datetime import datetime
from typing import List
import numpy as np
from spotipy import Spotify
from dateutil.parser import parse
import matplotlib.pyplot as plt
def fetch_recent_songs(client: Spotify):
cursor = client.current_user_recently_played()
recently_played: List[dict] = cursor["items"]
max_iterations = 30
it = 0
while it < max_iterations and cursor["cursors"] is not None:
cursor = client.current_user_recently_played(before=cursor["cursors"]["before"])
recently_played.extend(cursor["items"])
return recently_played
def build_heatmap(recent_songs: List[dict]) -> np.ndarray:
heatmap = np.zeros((7, 20))
now = datetime.now().astimezone()
for track in recent_songs:
played_at = parse(track["played_at"])
weekday = datetime.weekday(played_at)
week_offset = (now - played_at).days // 7
heatmap[weekday, -(week_offset +1)] +=1
return heatmap
def plot(heatmap: np.ndarray):
fig, ax = plt.subplots()
ax.imshow(heatmap, cmap="Greens")
ax.set_ylim(0, 6)
ax.set_title("Recent activity")
ax.set_yticklabels(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
return fig, ax