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