listening-analysis/analysis/net.py

39 lines
1.3 KiB
Python

import os
from typing import List
import pandas as pd
from spotframework.model.track import PlaylistTrack
from spotframework.net.network import Network as SpotNet, NetworkUser
from fmframework.net.network import Network as FMNet
def get_spotnet():
return SpotNet(NetworkUser(client_id=os.environ['SPOT_CLIENT'],
client_secret=os.environ['SPOT_SECRET'],
refresh_token=os.environ['SPOT_REFRESH'])).refresh_access_token()
def get_fmnet():
return FMNet(username='sarsoo', api_key=os.environ['FM_CLIENT'])
playlist_cache = dict() # low-tech caches for repeated pulling
all_playlists = list()
def get_playlist(name: str, spotnet: SpotNet):
global all_playlists
try:
return playlist_cache[name]
except KeyError:
if len(all_playlists) == 0:
all_playlists = spotnet.playlists()
playlist = [i for i in all_playlists if i.name == name][0]
playlist.tracks = spotnet.playlist_tracks(uri=playlist.uri)
playlist_cache[name] = playlist
return playlist
def track_frame(tracks: List[PlaylistTrack]):
return pd.DataFrame(
[
[i.track.name, i.track.artists[0].name]
for i in tracks
],
columns = ["track", "artist"]
)