def get_listens(user_id): count = min(request.args.get('count') or DEFAULT_ITEMS_PER_GET, MAX_ITEMS_PER_GET) max_ts = request.args.get('max_ts') or None cassandra = webserver.create_cassandra() listens = cassandra.fetch_listens(user_id, from_id=max_ts, limit=count) listen_data = [] for listen in listens: listen_data.append(listen.data) return jsonify({'payload': { 'user_id': user_id, 'count': len(listen_data), 'listens': listen_data, }})
def profile(user_id): cassandra = webserver.create_cassandra() # Getting data for current page max_ts = request.args.get("max_ts") if max_ts is not None: try: max_ts = int(max_ts) except ValueError: raise BadRequest("Incorrect timestamp argument to_id:" % request.args.get("to_id")) listens = [] for listen in cassandra.fetch_listens(user_id, limit=25, to_id=max_ts): listens.append({ "track_metadata": listen.data, "listened_at": listen.timestamp, "listened_at_iso": datetime.fromtimestamp(int(listen.timestamp)).isoformat() + "Z", }) if listens: # Checking if there is a "previous" page... previous_listens = list(cassandra.fetch_listens(user_id, limit=25, from_id=listens[0]["listened_at"])) if previous_listens: # Getting from the last item because `fetch_listens` returns in ascending # order when `from_id` is used. previous_listen_ts = previous_listens[-1].timestamp + 1 else: previous_listen_ts = None # Checking if there is a "next" page... next_listens = list(cassandra.fetch_listens(user_id, limit=1, to_id=listens[-1]["listened_at"])) if next_listens: next_listen_ts = listens[-1]["listened_at"] else: next_listen_ts = None else: previous_listen_ts = None next_listen_ts = None return render_template( "user/profile.html", user=_get_user(user_id), listens=listens, previous_listen_ts=previous_listen_ts, next_listen_ts=next_listen_ts, spotify_uri=_get_spotify_uri_for_listens(listens) )
def get_listens(user_id): cassandra = webserver.create_cassandra() listens = cassandra.fetch_listens( user_id, limit=min(_parse_int_arg("count", DEFAULT_ITEMS_PER_GET), MAX_ITEMS_PER_GET), from_id=_parse_int_arg("max_ts"), to_id=_parse_int_arg("min_ts"), order=request.args.get("order", "desc"), ) listen_data = [] for listen in listens: listen_data.append({ "track_metadata" : listen.data, "listened_at" : listen.timestamp }) return jsonify({'payload': { 'user_id': user_id, 'count': len(listen_data), 'listens': listen_data, }})
def get_listens(user_id): """ Get listens for user ``user_id``. The format for the JSON returned is defined in our :ref:`json-doc`. If none of the optional arguments are given, this endpoint will return the :data:`~webserver.views.api.DEFAULT_ITEMS_PER_GET` most recent listens. The optional ``max_ts`` and ``min_ts`` UNIX epoch timestamps control at which point in time to start returning listens. You may specify max_ts or min_ts, but not both in one call. Listens are always returned in descending timestamp order. :param max_ts: If you specify a ``max_ts`` timestamp, listens with listened_at less than (but not including) this value will be returned. :param min_ts: If you specify a ``min_ts`` timestamp, listens with listened_at greter than (but not including) this value will be returned. :param limit: Optional, number of listens to return. Default: :data:`~webserver.views.api.DEFAULT_ITEMS_PER_GET` . Max: :data:`~webserver.views.api.MAX_ITEMS_PER_GET` :statuscode 200: Yay, you have data! :resheader Content-Type: *application/json* """ max_ts = _parse_int_arg("max_ts") min_ts = _parse_int_arg("min_ts") if max_ts and min_ts: _log_and_raise_400("You may only specify max_ts or min_ts, not both.") cassandra = webserver.create_cassandra() listens = cassandra.fetch_listens( user_id, limit=min(_parse_int_arg("count", DEFAULT_ITEMS_PER_GET), MAX_ITEMS_PER_GET), from_id=min_ts, to_id=max_ts, ) listen_data = [] for listen in listens: listen_data.append({ "track_metadata" : listen.data, "listened_at" : listen.timestamp, "recording_msid" : listen.recording_msid, }) if min_ts: listen_data = listen_data[::-1] return jsonify({'payload': { 'user_id': user_id, 'count': len(listen_data), 'listens': listen_data, }})
def get_listens(user_id): count = max( request.args.get('count') or DEFAULT_ITEMS_PER_GET, MAX_ITEMS_PER_GET) max_ts = request.args.get('max_ts') or None cassandra = webserver.create_cassandra() listens = cassandra.fetch_listens(user_id, from_id=max_ts, limit=count) listen_data = [] for listen in listens: temp = json.loads(listen.json) del temp['user_id'] listen_data.append(temp) return jsonify({ 'payload': { 'user_id': user_id, 'count': count, 'listens': listen_data, } })