From 3d4eb7a389c19c78f3130b4809c7beb33cadfc41 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 7 Sep 2020 22:14:41 +0200 Subject: ucs: first basic parser of json events Signed-off-by: Alban Gruin --- src/dune | 3 ++- src/ucs.ml | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dune b/src/dune index f096d3f..a31d206 100644 --- a/src/dune +++ b/src/dune @@ -1,2 +1,3 @@ (executable - (name ucs)) + (name ucs) + (libraries lwt.unix cohttp-lwt-unix ezjsonm ocplib-json-typed)) diff --git a/src/ucs.ml b/src/ucs.ml index 6bce98a..00f5469 100644 --- a/src/ucs.ml +++ b/src/ucs.ml @@ -1,2 +1,60 @@ +open Lwt +open Cohttp +open Cohttp_lwt_unix + +module J = Json_encoding + +type course = { + start: string; + stop: string; + description: string; + category: string; + place: string } + +let encoding = + J.(conv + (fun _ -> ("", "", "", false, "", (), (), (), (), ""), + ([], None, (), (), (), (), ())) + (fun ((_id, start, stop, _allDay, description, (), (), (), (), category), + (_sites, _modules, (), (), (), (), ())) -> + {start; stop; description; category; place=""}) + (merge_objs + (obj10 + (req "id" string) + (req "start" string) + (req "end" string) + (req "allDay" bool) + (req "description" string) + (req "backgroundColor" unit) + (req "textColor" unit) + (req "department" unit) + (req "faculty" unit) + (req "eventCategory" string)) + (obj7 + (req "sites" @@ list string) + (req "modules" @@ option (list string)) + (req "registerStatus" unit) + (req "studentMark" unit) + (req "custom1" unit) + (req "custom2" unit) + (req "custom3" unit)))) + +let decode enc s = + let toks = + match s with + | "" -> `O [] + | s -> Ezjsonm.from_string s in + J.destruct enc toks + +let body = + let parameters = "start=2020-09-01&end=2020-10-01&resType=103&calView=month&federationIds[]=IINS9CMA&colourScheme=3" in + let body = Cohttp_lwt.Body.of_string parameters and + headers = Header.init_with "Content-Type" "application/x-www-form-urlencoded" in + Client.post ~body ~headers (Uri.of_string "https://edt.univ-tlse3.fr/calendar2/Home/GetCalendarData") >>= fun (_resp, body) -> + Cohttp_lwt.Body.to_string body + let () = - print_endline "hello, world" + let body = Lwt_main.run body in + List.iter (fun {start; stop; description; category; place} -> + Printf.printf "%s\n%s\n%s\n%s\n%s\n\n" start stop description category place) + @@ decode (J.list encoding) body -- cgit v1.2.1