aboutsummaryrefslogtreecommitdiff
path: root/src/ucs.ml
blob: 00f546991d960a4679ce752de59ce28ff4ffd9c2 (plain)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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 () =
  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