9 unstable releases (3 breaking)
0.9.1 | Dec 4, 2023 |
---|---|
0.9.0 | Sep 13, 2023 |
0.8.0 | Aug 8, 2023 |
0.7.4 | Mar 31, 2023 |
0.6.1 | Nov 9, 2022 |
#332 in Web programming
370KB
3K
SLoC
webweg | webreg_scraper | UCSDHistEnrollmentData
An asynchronous API wrapper for the University of California San Diego's WebReg course enrollment system.
Usage
To use this crate, run the following command:
cargo add webweg
Alternatively, you can also put the following line into your Cargo.toml
:
webweg = { version = "0.9", features = ["multi"] }
See the corresponding crates.io page for more information.
Wrapper Features
A lot of the things that you can do on WebReg can be done with this wrapper. For example, you're able to:
- Get all possible classes in the quarter.
- Search for classes based on some conditions (i.e., advanced search).
- Get detailed information about a specific class (e.g., number of students enrolled, instructor, etc.)
- Get your current schedule.
You're also able to do things like:
- Change grading options.
- Enroll in, or drop, a class.
- Plan, or un-plan, a class.
- Waitlist, or un-waitlist, a class.
- Create, remove, or rename your schedules.
- Send a confirmation email to yourself.
To see some examples, check out the examples
folder.
Multithreading
By default, the wrapper will assume an environment where it is used in a single thread or task. So, if you want to share
an instance of the wrapper across multiple threads or tasks, you would have to use a Mutex
. The problem with using a
Mutex
is that if a request is taking a long time (which isn't unusual), the entire wrapper is locked until the request
is finished, meaning the other threads using this instance of the wrapper must wait.
By enabling the multi
feature, the wrapper can be used across multiple threads or tasks without the need for a Mutex
.
To add this crate with the multi
feature, you can either run
cargo add webweg --features multi
or put
webweg = { version = "0.9", features = ["multi"] }
in your Cargo.toml
.
Authentication
Click Here
The way to provide authorization for this wrapper is to provide cookies from an active WebReg session (i.e., your authentication cookies).
To get your authentication cookies, you'll need to do the following:
- Log into WebReg.
- Select a term in the WebReg main menu.
- Open Developer Tools (With Google Chrome, go to the three dots, "More tools," and then "Developer tools.")
- Go to the "Network" tab of the Developer Tools. Then, either:
- Filter by the text
https://act.ucsd.edu/webreg2/svc/wradapter
- OR, filter by
Fetch/XHR
.
- Filter by the text
- Make some sort of request on WebReg (e.g., searching a course).
- Look for a request made by WebReg.
- Under the request headers, copy the cookie.
Keep in mind that your cookies will expire after either:
- 10 minutes of inactivity (i.e., you do not make some request that uses your cookies for more than 10 minutes), or
- when WebReg goes into maintenance mode; this occurs daily at around 4:15AM pacific time.
Thus, you will need to find some way to keep yourself logged into WebReg 24/7 if you want to perform continuous requests.
Definition Files
This crate comes with two definition files:
raw_types
types
Most wrapper methods will make use of return types which can be found in
types
. Very rarely will you need to use raw_types
;
the only time you will need to use raw_types
is if you're using
the search_courses
method.
Tests
Many tests here are focused on the parsing aspect of the wrapper, and not making the request itself. It is assumed that making the request should be relatively error-free.
Versioning
This crate uses a versioning scheme that is roughly based on Semantic Versioning. For a version
MAJOR.MINOR.PATCH
- the
MAJOR
version will be incremented when a very significant feature is added, or many non-backwards compatible changes are added, or a (one or more) significant non-backwards compatible change is added - the
MINOR
version will be incremented when a minor feature is added, or few (if any) minor non-backwards compatible changes are added. - the
PATCH
version will be incremented when a minor enhancement/feature is added or a bug is fixed.
Disclaimer
I am not responsible for any damages or other issue(s) caused by any use of this wrapper. In other words, by using this wrapper, I am not responsible if you somehow get in trouble or otherwise run into problems.
License
Everything in this repository is licensed under the MIT license.
Dependencies
~4–15MB
~221K SLoC