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 () = 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