Пример #1
0
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,
    }})
Пример #2
0
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)
    )
Пример #3
0
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,
    }})
Пример #4
0
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,
    }})
Пример #5
0
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,
        }
    })