Access Plus Plus began as a hackathon project with the aim to transform our school’s Access Plus website into something a bit more user friendly. Seeing the potential of our chrome extension, my friend and I decided to finish it and to make it readily available to the student populace.
A++ brings four main functionalities to Access Plus:
-> Rate My Professor integration on the schedule page
-> Displays the student's schedule on the registration page, allowing for a real time update as the student registers for classes
-> A meal tracker that can keep track of how many meals the student is above/below budget on a daily/weekly/monthly basis
-> Exports the student's calendar to an .ics format (compatible with Google Calendar, Outlook, iCal, and most calendar applications) with a single click
My main responsibilities were the Rate My Professor and Meal Tracker functionality, as well as page parsing and UI design.
The main difficulty I had with this extension was figuring out a way to parse the website, as Access Plus was not developed in a way that made it easily extendable. It did not use divs, and it barely had any component ids, being composed of an infinite amount of nameless nested tables. I eventually managed to find a lone table that miraculously did have an id, and after a few children() calls, was able to get closer to the information I required. To facilitate my page scraping, whenever a user loads the schedule page, ids are injected to the table rows from that point onwards. After performing that little hacky maneuver, it was just a matter of looping through my newly named rows and searching for specific patterns. My parser fetches information for both the Rate My Professor integration as well as the Calendar Export function. It is capable of dealing with different student schedules as well as the more exotic classes, such as experimental classes and off campus classes (which Access Plus interprets differently).
The main idea behind the meal tracker is that it'll keep track of the number of days, weeks, and months that have passed since the start of the semester. The simplified calculation for the number of extra meals is: Meals = avgNumMeals * timeFrame, Meals -= (startMeals - mealsLeft); where 'avgNumMeals' is the average number of meals for a given meal plan, 'timeFrame' is the number of passed days/weeks/months according to a given time frame, startMeals is the initial meal count, and mealsLeft is the number of remaining meals.
To make the calculator work, the meal tracker has to dynamically keep track of the current term, whether the dining center is open or not(holidays), and how many days/weeks/months have passed since the start of the term.
The real trick was keeping the code as modular as possible to facilitate page scraping, design, and calculations.
If curious, I'd recommend taking a look at this project's github link, given below. There's a lot more going on behind the scenes than that high level overview. ;)