Added admin command to scan personal history (#58)

Reverted exported history file to exclude timestamp. Simplified logging
for scanning user history.
This commit is contained in:
2018-11-17 19:37:51 -05:00
parent 895cf7d40d
commit 4ddf11aa41
6 changed files with 24 additions and 60 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
*.pyc *.pyc
*.log
db.sqlite3 db.sqlite3
*.bak *.bak
.idea/ .idea/

View File

@@ -0,0 +1,10 @@
from django.core.management.base import BaseCommand, CommandError
from api.utils import parse_history
from login.models import User
class Command(BaseCommand):
help = 'Update history for users who requested it'
def handle(self, *args, **options):
user_id = "polarbier"
parse_history(User.objects.get(id=user_id).secret)

View File

@@ -13,13 +13,14 @@ from . import views
from login.models import User from login.models import User
from pprint import pprint from pprint import pprint
from dateutil.parser import parse from dateutil.parser import parse
from datetime import datetime
HISTORY_ENDPOINT = 'https://api.spotify.com/v1/me/player/recently-played' HISTORY_ENDPOINT = 'https://api.spotify.com/v1/me/player/recently-played'
# }}} imports # # }}} imports #
console_logging = True # console_logging = True
# console_logging = False console_logging = False
artists_genre_processed = 0 artists_genre_processed = 0
features_processed = 0 features_processed = 0
@@ -365,8 +366,7 @@ def parse_history(user_secret):
params=payload).json()['items'] params=payload).json()['items']
# pprint(history_response) # pprint(history_response)
if console_logging: tracks_processed = 0
tracks_processed = 0
for track_dict in history_response: for track_dict in history_response:
# don't associate history track with User, not necessarily in their # don't associate history track with User, not necessarily in their
@@ -379,9 +379,9 @@ def parse_history(user_secret):
track_artists, None) track_artists, None)
history_obj = save_history_obj(user_obj, parse(track_dict['played_at']), history_obj = save_history_obj(user_obj, parse(track_dict['played_at']),
track_obj) track_obj)
tracks_processed += 1
if console_logging: if console_logging:
tracks_processed += 1
print("Added history track #{}: {}".format( print("Added history track #{}: {}".format(
tracks_processed, history_obj,)) tracks_processed, history_obj,))
@@ -391,5 +391,8 @@ def parse_history(user_secret):
# TODO: update track genres from History relation # TODO: update track genres from History relation
# update_track_genres(user_obj) # update_track_genres(user_obj)
print("Scanned {} history tracks for user {} at {}.".format(
tracks_processed, user_obj.id, datetime.now()))
# }}} get_history # # }}} get_history #

View File

@@ -115,59 +115,7 @@ def parse_library(request, user_secret):
# }}} parse_library # # }}} parse_library #
# # parse_history {{{ # # parse_history_request {{{ #
# def parse_history(request, user_secret):
# """Scans user's listening history and stores the information in a
# database.
# :user_secret: secret for User object who's library is being scanned.
# :returns: None
# """
# user_obj = User.objects.get(secret=user_secret)
# payload = {'limit': str(USER_TRACKS_LIMIT)}
# last_time_played = History.objects.filter(user=user_obj).aggregate(Max('timestamp'))['timestamp__max']
# if last_time_played is not None:
# payload['after'] = last_time_played.isoformat()
# artist_genre_queue = []
# user_headers = get_user_header(user_obj)
# history_response = requests.get(HISTORY_ENDPOINT,
# headers=user_headers,
# params=payload).json()['items']
# # pprint(history_response)
# if console_logging:
# tracks_processed = 0
# for track_dict in history_response:
# # don't associate history track with User, not necessarily in their
# # library
# # track_obj, track_created = save_track_obj(track_dict['track'],
# # track_artists, None)
# track_artists = save_track_artists(track_dict['track'], artist_genre_queue,
# user_headers)
# track_obj, track_created = save_track_obj(track_dict['track'],
# track_artists, None)
# history_obj = save_history_obj(user_obj, parse(track_dict['played_at']),
# track_obj)
# if console_logging:
# tracks_processed += 1
# print("Added history track #{}: {}".format(
# tracks_processed, history_obj,))
# if len(artist_genre_queue) > 0:
# add_artist_genres(user_headers, artist_genre_queue)
# # TODO: update track genres from History relation
# # update_track_genres(user_obj)
# return render(request, 'graphs/logged_in.html', get_user_context(user_obj))
# # }}} get_history #
# parse_history {{{ #
def parse_history_request(request, user_secret): def parse_history_request(request, user_secret):
"""Request function to call parse_history. Scans user's listening history """Request function to call parse_history. Scans user's listening history

View File

@@ -71,8 +71,9 @@ class HistoryList(ExportMixin, SingleTableView):
def get_export_filename(self, export_format): def get_export_filename(self, export_format):
user_id = self.request.session['user_id'] user_id = self.request.session['user_id']
timestamp = strftime("%m%d%Y-%H%M") # timestamp = strftime("%m%d%Y-%H%M")
return "{}.{}".format("-".join((user_id, timestamp)), export_format) # return "{}.{}".format("-".join((user_id, timestamp)), export_format)
return "{}.{}".format(user_id, export_format)
def create_export(self, export_format): def create_export(self, export_format):
export_exclude = ('id', 'user', 'track', 'track_name', 'artists', export_exclude = ('id', 'user', 'track', 'track_name', 'artists',

1
update-history.sh Executable file
View File

@@ -0,0 +1 @@
/home/kevin/coding/spotify-lib-vis/bin/python /home/kevin/coding/spotify-lib-vis/src/manage.py update-history >> /home/kevin/coding/spotify-lib-vis/src/api/management/commands/update-history.log