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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
*.pyc
|
||||
*.log
|
||||
db.sqlite3
|
||||
*.bak
|
||||
.idea/
|
||||
|
||||
10
api/management/commands/update-history.py
Normal file
10
api/management/commands/update-history.py
Normal 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)
|
||||
13
api/utils.py
13
api/utils.py
@@ -13,13 +13,14 @@ from . import views
|
||||
from login.models import User
|
||||
from pprint import pprint
|
||||
from dateutil.parser import parse
|
||||
from datetime import datetime
|
||||
|
||||
HISTORY_ENDPOINT = 'https://api.spotify.com/v1/me/player/recently-played'
|
||||
|
||||
# }}} imports #
|
||||
|
||||
console_logging = True
|
||||
# console_logging = False
|
||||
# console_logging = True
|
||||
console_logging = False
|
||||
artists_genre_processed = 0
|
||||
features_processed = 0
|
||||
|
||||
@@ -365,8 +366,7 @@ def parse_history(user_secret):
|
||||
params=payload).json()['items']
|
||||
# pprint(history_response)
|
||||
|
||||
if console_logging:
|
||||
tracks_processed = 0
|
||||
tracks_processed = 0
|
||||
|
||||
for track_dict in history_response:
|
||||
# don't associate history track with User, not necessarily in their
|
||||
@@ -379,9 +379,9 @@ def parse_history(user_secret):
|
||||
track_artists, None)
|
||||
history_obj = save_history_obj(user_obj, parse(track_dict['played_at']),
|
||||
track_obj)
|
||||
tracks_processed += 1
|
||||
|
||||
if console_logging:
|
||||
tracks_processed += 1
|
||||
print("Added history track #{}: {}".format(
|
||||
tracks_processed, history_obj,))
|
||||
|
||||
@@ -391,5 +391,8 @@ def parse_history(user_secret):
|
||||
# TODO: update track genres from History relation
|
||||
# update_track_genres(user_obj)
|
||||
|
||||
print("Scanned {} history tracks for user {} at {}.".format(
|
||||
tracks_processed, user_obj.id, datetime.now()))
|
||||
|
||||
# }}} get_history #
|
||||
|
||||
|
||||
54
api/views.py
54
api/views.py
@@ -115,59 +115,7 @@ def parse_library(request, user_secret):
|
||||
|
||||
# }}} parse_library #
|
||||
|
||||
# # parse_history {{{ #
|
||||
|
||||
# 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 {{{ #
|
||||
# parse_history_request {{{ #
|
||||
|
||||
def parse_history_request(request, user_secret):
|
||||
"""Request function to call parse_history. Scans user's listening history
|
||||
|
||||
@@ -71,8 +71,9 @@ class HistoryList(ExportMixin, SingleTableView):
|
||||
|
||||
def get_export_filename(self, export_format):
|
||||
user_id = self.request.session['user_id']
|
||||
timestamp = strftime("%m%d%Y-%H%M")
|
||||
return "{}.{}".format("-".join((user_id, timestamp)), export_format)
|
||||
# timestamp = strftime("%m%d%Y-%H%M")
|
||||
# return "{}.{}".format("-".join((user_id, timestamp)), export_format)
|
||||
return "{}.{}".format(user_id, export_format)
|
||||
|
||||
def create_export(self, export_format):
|
||||
export_exclude = ('id', 'user', 'track', 'track_name', 'artists',
|
||||
|
||||
1
update-history.sh
Executable file
1
update-history.sh
Executable 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
|
||||
Reference in New Issue
Block a user