|
@ -13,15 +13,17 @@ import json |
|
|
|
|
|
|
|
|
# global vars {{{ # |
|
|
# global vars {{{ # |
|
|
|
|
|
|
|
|
console_logging = True |
|
|
|
|
|
# console_logging = False |
|
|
|
|
|
|
|
|
|
|
|
USER_TRACKS_LIMIT = 50 |
|
|
USER_TRACKS_LIMIT = 50 |
|
|
ARTIST_LIMIT = 50 |
|
|
ARTIST_LIMIT = 50 |
|
|
FEATURES_LIMIT = 100 |
|
|
FEATURES_LIMIT = 100 |
|
|
# ARTIST_LIMIT = 25 |
|
|
# ARTIST_LIMIT = 25 |
|
|
# FEATURES_LIMIT = 25 |
|
|
# FEATURES_LIMIT = 25 |
|
|
|
|
|
|
|
|
|
|
|
console_logging = True |
|
|
|
|
|
# console_logging = False |
|
|
|
|
|
artists_genre_processed = 0 |
|
|
|
|
|
features_processed = 0 |
|
|
|
|
|
|
|
|
# }}} global vars # |
|
|
# }}} global vars # |
|
|
|
|
|
|
|
|
# parse_library {{{ # |
|
|
# parse_library {{{ # |
|
@ -51,6 +53,9 @@ def parse_library(headers, num_tracks, user): |
|
|
headers=headers, |
|
|
headers=headers, |
|
|
params=payload).json()['items'] |
|
|
params=payload).json()['items'] |
|
|
|
|
|
|
|
|
|
|
|
if console_logging: |
|
|
|
|
|
tracks_processed = 0 |
|
|
|
|
|
|
|
|
for track_dict in saved_tracks_response: |
|
|
for track_dict in saved_tracks_response: |
|
|
# add artists {{{ # |
|
|
# add artists {{{ # |
|
|
|
|
|
|
|
@ -87,10 +92,12 @@ def parse_library(headers, num_tracks, user): |
|
|
# }}} add audio features # |
|
|
# }}} add audio features # |
|
|
|
|
|
|
|
|
if console_logging: |
|
|
if console_logging: |
|
|
print("Added track #{}-{}: {} - {}".format(offset + 1, |
|
|
|
|
|
offset + USER_TRACKS_LIMIT, |
|
|
|
|
|
|
|
|
tracks_processed += 1 |
|
|
|
|
|
print("Added track #{}: {} - {}".format( |
|
|
|
|
|
offset + tracks_processed, |
|
|
track_obj.artists.first(), |
|
|
track_obj.artists.first(), |
|
|
track_obj.name)) |
|
|
|
|
|
|
|
|
track_obj.name, |
|
|
|
|
|
)) |
|
|
|
|
|
|
|
|
# calculates num_songs with offset + songs retrieved |
|
|
# calculates num_songs with offset + songs retrieved |
|
|
offset += USER_TRACKS_LIMIT |
|
|
offset += USER_TRACKS_LIMIT |
|
@ -121,6 +128,7 @@ def update_track_genres(user): |
|
|
:returns: None |
|
|
:returns: None |
|
|
|
|
|
|
|
|
""" |
|
|
""" |
|
|
|
|
|
tracks_processed = 0 |
|
|
user_tracks = Track.objects.filter(users__exact=user) |
|
|
user_tracks = Track.objects.filter(users__exact=user) |
|
|
for track in user_tracks: |
|
|
for track in user_tracks: |
|
|
# just using this variable to save another call to db |
|
|
# just using this variable to save another call to db |
|
@ -137,9 +145,14 @@ def update_track_genres(user): |
|
|
track.genre = most_common_genre if most_common_genre is not None \ |
|
|
track.genre = most_common_genre if most_common_genre is not None \ |
|
|
else undefined_genre_obj |
|
|
else undefined_genre_obj |
|
|
track.save() |
|
|
track.save() |
|
|
|
|
|
tracks_processed += 1 |
|
|
|
|
|
|
|
|
if console_logging: |
|
|
if console_logging: |
|
|
print("Added '{}' as genre for song '{}'".format(track.genre, track.name)) |
|
|
|
|
|
|
|
|
print("Added '{}' as genre for song #{} - '{}'".format( |
|
|
|
|
|
track.genre, |
|
|
|
|
|
tracks_processed, |
|
|
|
|
|
track.name, |
|
|
|
|
|
)) |
|
|
|
|
|
|
|
|
# }}} update_track_genres # |
|
|
# }}} update_track_genres # |
|
|
|
|
|
|
|
@ -190,6 +203,7 @@ def get_audio_features(headers, track_objs): |
|
|
|
|
|
|
|
|
:returns: None |
|
|
:returns: None |
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
track_ids = str.join(",", [track_obj.track_id for track_obj in track_objs]) |
|
|
track_ids = str.join(",", [track_obj.track_id for track_obj in track_objs]) |
|
|
features_response = requests.get("https://api.spotify.com/v1/audio-features", |
|
|
features_response = requests.get("https://api.spotify.com/v1/audio-features", |
|
|
headers=headers, |
|
|
headers=headers, |
|
@ -209,8 +223,10 @@ def get_audio_features(headers, track_objs): |
|
|
cur_features_obj.save() |
|
|
cur_features_obj.save() |
|
|
|
|
|
|
|
|
if console_logging: |
|
|
if console_logging: |
|
|
print("Added features for song #{} - {}".format(i + 1, |
|
|
|
|
|
track_objs[i].name)) |
|
|
|
|
|
|
|
|
global features_processed |
|
|
|
|
|
features_processed += 1 |
|
|
|
|
|
print("Added features for song #{} - {}".format( |
|
|
|
|
|
features_processed, track_objs[i].name)) |
|
|
|
|
|
|
|
|
# }}} get_audio_features # |
|
|
# }}} get_audio_features # |
|
|
|
|
|
|
|
@ -248,6 +264,7 @@ def add_artist_genres(headers, artist_objs): |
|
|
:returns: None |
|
|
:returns: None |
|
|
|
|
|
|
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
artist_ids = str.join(",", [artist_obj.artist_id for artist_obj in artist_objs]) |
|
|
artist_ids = str.join(",", [artist_obj.artist_id for artist_obj in artist_objs]) |
|
|
artists_response = requests.get('https://api.spotify.com/v1/artists/', |
|
|
artists_response = requests.get('https://api.spotify.com/v1/artists/', |
|
|
headers=headers, |
|
|
headers=headers, |
|
@ -261,8 +278,10 @@ def add_artist_genres(headers, artist_objs): |
|
|
process_artist_genre(genre, artist_objs[i]) |
|
|
process_artist_genre(genre, artist_objs[i]) |
|
|
|
|
|
|
|
|
if console_logging: |
|
|
if console_logging: |
|
|
print("Added genres for artist #{} - {}".format(i + 1, |
|
|
|
|
|
artist_objs[i].name)) |
|
|
|
|
|
|
|
|
global artists_genre_processed |
|
|
|
|
|
artists_genre_processed += 1 |
|
|
|
|
|
print("Added genres for artist #{} - {}".format( |
|
|
|
|
|
artists_genre_processed, artist_objs[i].name)) |
|
|
|
|
|
|
|
|
# }}} add_artist_genres # |
|
|
# }}} add_artist_genres # |
|
|
|
|
|
|
|
|