devsoc-unsw / notangles

The best tool to plan your weekly UNSW timetable with friends. Super easy, customisable, drag and drop. Now with autotimetabling and custom event creation! Social timetabling coming soon.
https://notangles.devsoc.app
Other
60 stars 5 forks source link

Allocate+ Timetable Support #665

Open sebasptsch opened 1 year ago

sebasptsch commented 1 year ago

Hi there, there's a few universities that use the allocate+ timetabling system. Namely USyd, ANU and UTS (but I'm sure there's more). I know that there's an accessible endpoint for the UTS instance for querying subject availability and times. The same may be true for other instances.

I would be willing to contribute to an implementation supporting this as I'm familiar with Redux and Redux Toolkit (slices and rtk). Lmk

Rayahhhmed commented 1 year ago

Hey there! I was just curious as to what the UTS endpoint is. From past experience, USyd has authenticated API, for which the tokens that are provided are very short-lived. I am not sure if this is the same for ANU, would it be possible for you to get back to me on this?

sebasptsch commented 1 year ago

Here's a sample of some of the code I use to interact with the API https://github.com/utsprogsoc/KronosUTS/blob/main/packages/backend/src/fetcher/fetcher.service.ts

sebasptsch commented 1 year ago

If you go to https://mytimetablecloud.uts.edu.au/odd/ you can see the different interfaces. For the UTS one there's a public version. Not sure about other universities.

lhjt commented 1 year ago

If you go to https://mytimetablecloud.uts.edu.au/odd/ you can see the different interfaces. For the UTS one there's a public version.

This seems to redirect me to an SSO page? (unless you meant that the API itself is public, while the UI to access it is not)

sebasptsch commented 1 year ago

Sorry, looks like the directory page is behind SSO. The actual public access timetable is here

pl4nty commented 1 year ago

/subjects, /locations, and /studentsets (groups) are public at /odd/rest/timetable, and they worked when I used a gateway for CORS/caching. So probably safe to scrape /subjects. Looks like it's just served by ELBs so may not even have ratelimiting or caching.

I'm not sure how to populate some of the scraper schema fields though, at least for ANU. career could map to courseCode[:-4] < 5000 ? Undergraduate : Postgraduate, but I don't think classes[].courseEnrolment or censusDates are available. mode seems to be missing too but was available from an older API (I used it for https://timetable.cssa.club).

Designing a scalable scraper might be tricky too depending on scope. crt.sh lists >150 cloud customers (ignoring on-prem, not sure if Allocate still sell it).

sebasptsch commented 1 year ago

At UTS the subject description always includes the same text to indicate that the subject is not in-person, though I'm not sure how it's handled for other universities.