diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py index b8a8dbbb7bb47d3b9f73da88c8c5e3eee5dba7b3..460427472a0cddab870bc882f734e41655ea825b 100644 --- a/server/djrandom/frontend/api_views.py +++ b/server/djrandom/frontend/api_views.py @@ -165,11 +165,19 @@ def last_uploaded_json(): return jsonify(results=last_uploaded) -@app.route('/json/random', methods=['POST']) +@app.route('/json/markov', methods=['POST']) @require_auth -def random_json(): +def markov_json(): n = int(request.form.get('n', 10)) hashes = request.form.get('h', '').split(',') last_song = hashes[-1] sequence = svcs['markov'].generate_sequence(last_song, 2, n) return jsonify(results=sequence) + + +@app.route('/json/random', methods=['GET']) +@require_auth +def random_json(): + n = int(request.form.get('n', 10)) + random_songs = [x.sha1 for x in MP3.get_random_songs(n)] + return jsonify(results=random_songs) diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py index cb2c220243696195566e1879f2870a6a534d017d..662614e1400e9f2d7474bde120274e1d329ded86 100644 --- a/server/djrandom/model/mp3.py +++ b/server/djrandom/model/mp3.py @@ -42,6 +42,17 @@ class MP3(Base): return cls.query.filter_by(ready=True).order_by( desc(cls.uploaded_at)).limit(n) + @classmethod + def get_random_songs(cls, n=10): + """Return N completely random songs.""" + results = [] + num_songs = cls.query.filter_by(ready=True).count() + for idx in xrange(n): + song = cls.query.filter_by(ready=True).limit(1).offset( + random.randint(num_songs)).one() + results.append(song) + return results + class PlayLog(Base):