tmp
This commit is contained in:
parent
59a3be1108
commit
3744bd1c56
3 changed files with 57 additions and 9 deletions
|
|
@ -4,6 +4,13 @@ import os
|
||||||
data_dir = 'prefetched'
|
data_dir = 'prefetched'
|
||||||
|
|
||||||
|
|
||||||
|
class SongTags:
|
||||||
|
def __init__(self, title='', artist='', album=''):
|
||||||
|
self.artist = artist
|
||||||
|
self.title = title
|
||||||
|
self.album = album
|
||||||
|
|
||||||
|
|
||||||
def get_data(name):
|
def get_data(name):
|
||||||
file_path = os.path.join(data_dir, f"{name}.json")
|
file_path = os.path.join(data_dir, f"{name}.json")
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ from DataBase import *
|
||||||
from SpotifyWebAPI import find_song, update_access_token
|
from SpotifyWebAPI import find_song, update_access_token
|
||||||
|
|
||||||
from fuzzywuzzy import fuzz
|
from fuzzywuzzy import fuzz
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
def spotify_pattern_generator():
|
def spotify_pattern_generator():
|
||||||
|
|
@ -11,7 +12,6 @@ def spotify_pattern_generator():
|
||||||
spotify_library = get_data("tracks")
|
spotify_library = get_data("tracks")
|
||||||
|
|
||||||
def find_local_songs_on_spotify(local_lib):
|
def find_local_songs_on_spotify(local_lib):
|
||||||
from tqdm import tqdm
|
|
||||||
total = len(local_library)
|
total = len(local_library)
|
||||||
found_tracks_map = {}
|
found_tracks_map = {}
|
||||||
with tqdm(total=total, desc='Searching local songs on spotify') as pbar:
|
with tqdm(total=total, desc='Searching local songs on spotify') as pbar:
|
||||||
|
|
@ -60,7 +60,6 @@ def fuzzy_pattern_generator():
|
||||||
return sorted_results
|
return sorted_results
|
||||||
|
|
||||||
def resolve_tracks(s_patterns, t_patterns):
|
def resolve_tracks(s_patterns, t_patterns):
|
||||||
from tqdm import tqdm
|
|
||||||
|
|
||||||
pattern_map = {}
|
pattern_map = {}
|
||||||
|
|
||||||
|
|
@ -89,9 +88,43 @@ def fuzzy_pattern_generator():
|
||||||
save_data(fuzzy_pattern, "link_pattern_fuzzy")
|
save_data(fuzzy_pattern, "link_pattern_fuzzy")
|
||||||
|
|
||||||
|
|
||||||
|
def fuzzy_tag_pattern_generator():
|
||||||
|
local_library = get_data("local_library")
|
||||||
|
spotify_library = get_data("tracks")
|
||||||
|
mappings = {}
|
||||||
|
|
||||||
|
def fuzzy_tags_ratio(first: SongTags, second: SongTags):
|
||||||
|
title_ratio = fuzz.ratio(first.title, second.title) / 100
|
||||||
|
artist_ratio = fuzz.ratio(first.artist, second.artist) / 100
|
||||||
|
album_ratio = fuzz.ratio(first.album, second.album) / 100
|
||||||
|
return sum([title_ratio, artist_ratio, album_ratio]) / 3
|
||||||
|
|
||||||
|
with tqdm(total=len(local_library), desc='Searching local songs on spotify') as pbar:
|
||||||
|
for local_track_id, local_track in local_library.items():
|
||||||
|
mapping = mappings.get(local_track_id, {"score": 1.0, "items": []})
|
||||||
|
ratios = []
|
||||||
|
for remote_track in spotify_library:
|
||||||
|
track = remote_track['track']
|
||||||
|
|
||||||
|
tag1 = SongTags(local_track['name'], local_track['artist'], local_track['album'])
|
||||||
|
tag2 = SongTags(track['name'], get_artists_str(track['artists']), track['album']['name'])
|
||||||
|
|
||||||
|
ratios.append((fuzzy_tags_ratio(tag1, tag2), track['id']))
|
||||||
|
|
||||||
|
ratios.sort(reverse=True, key=lambda x: x[0])
|
||||||
|
if ratios[0][0] > 0.8:
|
||||||
|
mapping['items'] = [ratios[0][1]]
|
||||||
|
|
||||||
|
mappings[local_track_id] = mapping
|
||||||
|
pbar.update(1)
|
||||||
|
|
||||||
|
save_data(mappings, "link_pattern_tags")
|
||||||
|
|
||||||
|
|
||||||
def run_pattern_generators():
|
def run_pattern_generators():
|
||||||
#fuzzy_pattern_generator()
|
#fuzzy_pattern_generator()
|
||||||
spotify_pattern_generator()
|
#spotify_pattern_generator()
|
||||||
|
fuzzy_tag_pattern_generator()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
20
main.py
20
main.py
|
|
@ -12,9 +12,12 @@ def get_playlist_names(pl):
|
||||||
return [name for name, items in pl.items()]
|
return [name for name, items in pl.items()]
|
||||||
|
|
||||||
|
|
||||||
def print_playlist_tracks(name):
|
def print_playlist_tracks(pl_id: int):
|
||||||
|
pls = list(playlists)
|
||||||
|
name = pls[pl_id]
|
||||||
|
pl = playlists[name]
|
||||||
print(name)
|
print(name)
|
||||||
for track in playlists[name]:
|
for track in pl:
|
||||||
track_data = track['track']
|
track_data = track['track']
|
||||||
track_name = track_data['name']
|
track_name = track_data['name']
|
||||||
artists = get_artists_str(track_data['artists'])
|
artists = get_artists_str(track_data['artists'])
|
||||||
|
|
@ -46,9 +49,11 @@ def print_stats():
|
||||||
|
|
||||||
|
|
||||||
def print_tracks():
|
def print_tracks():
|
||||||
|
track_idx = 0
|
||||||
for trackItem in user_tracks:
|
for trackItem in user_tracks:
|
||||||
track = trackItem['track']
|
track = trackItem['track']
|
||||||
print(f" '{track['name']}' - {get_artists_str(track['artists'])}")
|
print(f" {track_idx}: '{track['name']}' by '{get_artists_str(track['artists'])}'")
|
||||||
|
track_idx += 1
|
||||||
|
|
||||||
|
|
||||||
class Interpreter(cmd.Cmd):
|
class Interpreter(cmd.Cmd):
|
||||||
|
|
@ -57,13 +62,16 @@ class Interpreter(cmd.Cmd):
|
||||||
|
|
||||||
def do_playlists(self, arg):
|
def do_playlists(self, arg):
|
||||||
"""prints user playlists"""
|
"""prints user playlists"""
|
||||||
print("\n".join(get_playlist_names(playlists)))
|
pl_id = 0
|
||||||
|
for pl in get_playlist_names(playlists):
|
||||||
|
print(f"{pl_id} - {pl}")
|
||||||
|
pl_id += 1
|
||||||
|
|
||||||
def do_playlist_tracks(self, arg):
|
def do_playlist_tracks(self, arg):
|
||||||
"""prints playlist [name]"""
|
"""prints playlist [name]"""
|
||||||
try:
|
try:
|
||||||
name = arg.split()[0]
|
pl_id = int(arg.split()[0])
|
||||||
print_playlist_tracks(name)
|
print_playlist_tracks(pl_id)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
print("Invalid input")
|
print("Invalid input")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue