Skip to main content

A solution to Blackboard misery for college students and professors

Project description

Blackboard Unsucked

crummy name for a fix of crummy software

If you are a student or faculty at ODU I'm sure you're no stranger to wasting 2-3 hours a day trying to find or post assignments via BlackBoard.

I am concerned with the student's view, but I hope this experiment can prove useful for professors as well. The goal is to wrap around existing BlackBoard infrastructure and provide a CLI API to access all the important functions which usually are trapped behind 4-5 links and a total 20-30 second browser load time.

Specific Goals

  • Login to BB
  • List classes for the current semester only (hide irrelevant ones)
  • List all announcements
  • List assignments for a given class
  • This will have to be sort of intelligent as professors put assignments in different places
  • Submit files for assignments
  • View/Post to discussion boards
  • Caching and Daemon operation, to prevent having to hit the network for most data access

Dependencies

Python3 requests, and BeautifulSoup, both of which can be installed via pip3

Usage

The fastest setup is to save a .har file of a recent Blackboard session someplace, then run

# Install the package
pip3 install --user bb_unsucked
# Read authentication details from .har
python3 -m bb_unsucked build-cache downloads/my-session.har
# use the __main__.py program to list all of your classes
python3 -m bb_unsucked ls

in a script

the file demo_usage_in_script.py has more examples, but the hello world is:

import bb_unsucked

bb = bb_unsucked.BBUnsucked()

for my_class in bb.classes():
  print(f"I am in {my_class.course_id}")

authentication

To perform the authentication step the most reliable method is to save a .har file of a recent blackboard session. bb_unsucked is capable of parsing authentication session cookies out of the file recent_request.har.

how to save a .har from a browser

Config

bb-unsucked reads from config directives first from /etc/bb-unsucked/config.ini and then from $HOME/.bb-unsucked/config.ini. Neither file need to be present, but should you want to override a parameter the default config contents would be

[DEFAULT]
base_domain = https://www.blackboard.odu.edu
cookies_file = /j/.bb-unsucked/cookies.bin
agressive_caching = False
courses_cache_file = /j/.bb-unsucked/courses-cache.bin
courses_max_cache_s = 604800
announcements_cache_file = /j/.bb-unsucked/announcements-cache.bin
announcements_max_cache_s = 21600

As you can see, the base_domain defaults to ODU's blackboard instance, but this can be changed to point to any blackboard instance.

My config lists various cache files as being under /j/ (my home dir) because when using defaults bb-unsucked will dynamically generate the values of cookies_file, courses_cache_file, and announcements_cache_file.

Compiling cython binary

Some speed demons will want to optimize performance as much as possible, esp. if bb-unsucked is going to be used in other scripts. This repo contains a makefile which will build the binary bb-unsucked when you execute make bb-unsucked.

The binary outperforms the python module most effectively when reading cached data which requires no network access. It does this by inserting some code, cython_main_interpose.c, in the generated .c file that Cython outputs.

This code is responsible for trying to perform simple tasks without the need to jump into a python runtime. good examples are printing help text and listing classes, which the module takes 200ms doing and the binary takes 2ms to do.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bb_unsucked-0.0.14.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

bb_unsucked-0.0.14-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file bb_unsucked-0.0.14.tar.gz.

File metadata

  • Download URL: bb_unsucked-0.0.14.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.2

File hashes

Hashes for bb_unsucked-0.0.14.tar.gz
Algorithm Hash digest
SHA256 73c2c81dc642e4cb5f22cc22f031bbad3ab8e3b3c97e1e7aa9ebd237fee61915
MD5 963469ce42145481dcfc80b5ba415b02
BLAKE2b-256 1414406a4659657d0744791dd20e151894d572c29a876abfdc9b11f5f9eedca3

See more details on using hashes here.

File details

Details for the file bb_unsucked-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: bb_unsucked-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.7.2

File hashes

Hashes for bb_unsucked-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 aaa2cba6726af61d6649bb4d46959251a11daac3fcdfe398b354dc7e5e90acd3
MD5 70e1ea91281da145f971fb49c2064663
BLAKE2b-256 e2f64e71ffc7dfb98d8bffa9afc263fb2696e3ccf656f48b5deff5a15aeebd46

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page