@vanderbilt/yes-api
A simple, no-hassle library for efficiently querying Your Enrollment Services.
Created by Dylan Hanson (jovialis)
NOTE: THIS MODULE IS ESM ONLY IN CONJUNCTION WITH CHANGING NODE.JS COMMUNITY STANDARDS. READ MORE: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
Usage
Install
npm install @vanderbilt/yes-api
OR
yarn add @vanderbilt/yes-api
Import
import * as yes from "@vanderbilt/yes-api";
List All Available Subjects
This endpoint returns a list of subjects and their abbreviations. For example, Computer Science
is abbreviated asCS
.
// Subject[]
const subjects = await yes.getSubjects();
List All Available Terms
This endpoint lists all of the Terms available on YES, including their IDs and associated Sessions.
// Term[]
const terms = await yes.getTerms();
List All Sections
Returns a list of all of the Sections present on YES in a given Term. For example, CS 2201
may have 3 Sections, each of which will be returned as a unique record.
// Section[]
const sections = await yes.getAllSections(terms[0]);
Search All Sections
Returns up to 300 Sections fetched from YES using a search query in a given Term.
NOTE: THIS OPERATION CAN TAKE A LONG TIME! EXPECT UPWARDS OF 40 MINUTES FOR SPRING/FALL SEMESTERS.
// Section[]
const sections = await yes.searchSections("greece", terms[0]);
Fetch Section Details
Returns expanded details for a Section. This includes the section's current enrollment, notes, attributes, bookstore URL, and more. NOTE: This can be automatically fetched by passing true
for the detailed
param in getAllSections
or searchSections
.
// SectionDetails
const details = await yes.getSectionDetails(sections[0]);
Check Section Existence
Returns whether or not a Section exists within a given term. Note that this function accepts IDs, rather than objects.
// Boolean
const exists = await yes.sectionExists(sections[0].id, sections[0].term.id);
Response Streaming
Even though all functions return Promise-wrapped results, you can pass a handler as the last param to all functions in order to handle results as they are fetched from YES.
const sections = await yes.getAllSections(terms[0], false, (section, timeElapsed) => {
console.log(term);
console.log(`${timeElapsed}ms elapsed.`);
});
NOTE: The handler can return a promise!
const sections = await yes.getAllSections(terms[0], false, async (section, timeElapsed) => {
await mongodb.collection('sections').insert(section);
});
FAQ
Does this API fetch ALL Courses?
- For the most part, yes! There are a few exceptions. Due to our scraping algorithm and YES' limitations, we are unable to fetch courses with the course numbers
3850
,3851
,3852
, (Independent reading/study)7999
, (Master's Thesis Research)8999
, (Non candidate research)9999
(Ph.D dissertation research).
How should I use this package?
- This API's speed is unfortunately limited by the speed of YES itself since it fetches data from the source with every request. Consider using this API in a batch process, uploading discovered data to a database or lake for fast, efficient querying and downstream processing.
Thanks
Special thanks to VUIT for necessitating this package's existence. Super special thanks to the Vanderbilt Administration, which has so far not filed a cease and desist.