aboutsummaryrefslogtreecommitdiff
path: root/lib/listenbrainz.ml
blob: df04d3129609d46690994b4fa9a2f0dcc37d9f79 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
open Lwt

type query =
    | Get_listens of string
    | Get_validate_token

let query_uri query =
  let base_uri = "https://api.listenbrainz.org/1/" in
  let mk_uri q = Uri.of_string (base_uri ^ q) in
  match query with
    | Get_listens username -> mk_uri ("user/" ^ username ^ "/listens")
    | Get_validate_token -> mk_uri "validate-token"

let do_query query : (Cohttp.Response.t * string) Lwt.t =
  Cohttp_lwt_unix.Client.get (query_uri query) >>= fun (resp, body) ->
  Cohttp_lwt.Body.to_string body >|= fun body ->
  (resp, body)

let get_validate_token () =
  do_query Get_validate_token >|= fun (_resp, body) ->
  let parsed = Listenbrainz_j.get_validate_token_of_string body in
  (parsed.valid, parsed)

let get_listens username =
  do_query (Get_listens username) >|= fun (_resp, body) ->
  body |> (Listenbrainz_j.get_user_listens_of_string)