From 8d152bd98beb2328ef104e3c94cae077072474b8 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Sat, 17 Sep 2011 10:44:28 +0200 Subject: [PATCH] add "most_played" method to the API --- server/djrandom/frontend/api_views.py | 8 ++++++++ server/djrandom/model/mp3.py | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py index 461724b..96f421a 100644 --- a/server/djrandom/frontend/api_views.py +++ b/server/djrandom/frontend/api_views.py @@ -147,3 +147,11 @@ def more_like_these_json(): results = svcs['searcher'].more_like_these(hashes) return jsonify(results=results) + +@app.route('/json/most_played', methods=['GET']) +@require_auth +def most_played_json(): + most_played = [{'sha1': sha1, 'count': count} + for sha1, count in PlayLog.most_played(20)] + return jsonify(results=most_played) + diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py index 7832886..12a5b53 100644 --- a/server/djrandom/model/mp3.py +++ b/server/djrandom/model/mp3.py @@ -1,5 +1,5 @@ from sqlalchemy import * -from datetime import datetime +from datetime import datetime, timedelta from djrandom.database import Base @@ -47,6 +47,13 @@ class PlayLog(Base): stamp = Column(DateTime()) prev = Column(Text()) + @classmethod + def most_played(cls, n=10): + """Return the N most played songs.""" + one_month_ago = datetime.now() - timedelta(30) + return Session.query(cls.sha1, func.count(cls.sha1).label('count') + ).group_by(cls.sha1).order_by('count desc').limit(n) + @classmethod def generate_tuples(cls, n=2): """Yield all the transitions in the playlog. -- GitLab