aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlban Gruin2020-09-07 22:14:41 +0200
committerAlban Gruin2020-09-07 22:14:41 +0200
commit3d4eb7a389c19c78f3130b4809c7beb33cadfc41 (patch)
treeabbd66841073293106f4954370d414796ffad2f5 /src
parent60e2ec47ba457187ac33fb41206f35af11eb9a99 (diff)
ucs: first basic parser of json events
Signed-off-by: Alban Gruin <alban at pa1ch dot fr>
Diffstat (limited to 'src')
-rw-r--r--src/dune3
-rw-r--r--src/ucs.ml60
2 files changed, 61 insertions, 2 deletions
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