course-api-wrapper

Contributors Forks Stargazers Issues MIT License LinkedIn


SFU Course API Wrapper

An asynchronous TypeScript wrapper for SFU's course API.
Usage Examples · TypeDoc Documentation

Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Contributing
  5. License
  6. Contact
  7. Acknowledgments

This project was made since there is no developed wrapper that I know of for SFU's API. The goal is to not simply return the JSON data from the API, but custom classes with useful methods.

Also, this package has zero runtime dependencies! The package.json file only has "devDependencies", and no "dependencies".

This project is not endorsed or supported by Simon Fraser University.

How to set up locally. This package is not currently published to npm.

  • node
  • npm (comes with node)
  1. Clone this repository.
    git clone https://github.com/ewanbrinkman/sfu-course-api-wrapper.git
    
  2. Go to the directory of sfu-course-api-wrapper.
    cd sfu-course-api-wrapper
    
  3. Install NPM packages.
    npm install
    
  4. Build.
    npm run build
    
  5. Go to the directory of your own project. Then, install sfu-course-api-wrapper in your own project as shown below. The path is the where the sfu-api-folder is located, NOT the location of the lib folder created by npm run build in step 4 above.
    npm install /path/to/local/sfu-course-api-wrapper/installed/package
    

Example usage of this API wrapper are shown below. For more detail, including all the properties each class has, see the TypeDoc Documentation.

Note that the API wrapper functions are the default export, while classes returned by the API wrapper functions and types used by this API wrapper are named exports.

In a non-async environment:

import courseApiWrapper from 'course-api-wrapper';

courseApiWrapper
.courseSection('cmpt', '120', 'd100', 2021, 'fall')
.then((courseSection) => {
console.log(courseSection);
});

In an async environment:

import courseApiWrapper from 'course-api-wrapper';

(async () => {
const courseSection = await courseApiWrapper.courseSection(
'cmpt',
'105w',
'd100',
2022,
'fall',
);
console.log(courseSection);
})();

Get a course:

const course = await courseApiWrapper.course('cmpt', '120', 2021, 'fall');

Get a course offering:

const courseSection = await courseApiWrapper.courseSection(
'cmpt',
'120',
'd100',
2021,
'fall',
);

For the examples, assume an instance of class Course (found in Course.ts) called course has been created.

Check if a course has a given section:

const hasSection = await course.hasSection('d100');

Get a section of a course:

const courseSection = await course.getSection('d100');

Get all course offering sections of a course:

const courseSections = await course.getSections();

Loop through all course offering sections of a course:

for await (const courseSection of course) {
console.log(courseSection);
}

Feel free to fork and create a pull request, or open an issue.

Distributed under the MIT License. See LICENSE for more information.

Ewan Brinkman

Project Link: https://github.com/ewanbrinkman/sfu-course-api-wrapper