Documentation
¶
Index ¶
Examples ¶
Constants ¶
View Source
const END_AT_TOPIC = "Course Units"
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ClassBriefInfo ¶
type ClassBriefInfo struct {
// AKA ClassNumber (not to be confused with number for search)
ID string
DetailsURL string
// Title, eg. "CSE 13S - 01 Comp Sys and C Prog"
FullTitle string
// Full number, eg. "CSE 13S - 01".
// Note that this is not to be confused with Number or ID. It just differentiates the specific class from other
// classes of the same subject and number.
FullNumber string
// Name, eg. "Comp Sys and C Prog"
Name string
Subject string
Number string
Location string
TimeDay string
Instructor string
Status ClassStatus
Enrolled int
Capacity int
}
func SearchClasses ¶
func SearchClasses(c *http.Client, opt *SearchOptions) ([]*ClassBriefInfo, error)
Example ¶
package main
import (
"fmt"
"net/http"
"time"
"github.com/ethanent/ucscclasses"
)
var c = &http.Client{Timeout: time.Second * 5}
func main() {
// First, get current term
terms, _, _, err := ucscclasses.GetFixedData(c)
if err != nil {
panic(err)
}
currentTerm := terms[0].Value
// Now, search for the class CSE 13S
cbis, err := ucscclasses.SearchClasses(c, &ucscclasses.SearchOptions{
Term: currentTerm,
Subject: "CSE",
Number: "13S",
NumberSearchMethod: ucscclasses.SearchMethodEqual,
})
if err != nil {
panic(err)
}
// Let's iterate the CBIs to print results!
fmt.Println(len(cbis), "results:")
for _, cc := range cbis {
fmt.Println("===== (" + cc.ID + ") " + cc.FullNumber + ": " + cc.Name + " =====")
fmt.Println("This is a", cc.Subject, cc.Number, "class!")
fmt.Println("(", cc.Enrolled, "/", cc.Capacity, ")", cc.Instructor)
fmt.Println(cc.Location, "|", cc.TimeDay, "OPEN?", cc.Status == ucscclasses.ClassStatusOpen, cc.DetailsURL)
}
// You can use the DetailsURL of a CBI to retrieve class details using the Details function
}
type ClassDetails ¶
type ClassDetails struct {
// AKA ClassNumber (not to be confused with number for search.
ID string
// Title, eg. "CSE 13S - 01 Comp Sys and C Prog"
FullTitle string
// Full number, eg. "CSE 13S - 01".
// Note that this is not to be confused with Number or ID. It just differentiates the specific class from other
// classes of the same subject and number.
FullNumber string
// Name, eg. "Computer Systems and C Programming"
Name string
Subject string
Number string
Status ClassStatus
Capacity int
Enrolled int
WaitlistTotal int
WaitlistCapacity int
Career string
Description string
EnrollmentRequirements string
ClassNotes string
Units int
// Observed types have been "Lecture" and "Seminar"
Type string
GE string
Location string
TimeDay string
Instructor string
MeetingDates string
DiscussionSections []*DiscussionSection
}
func GetClassDetails ¶
func GetClassDetails(c *http.Client, detailsURL string) (*ClassDetails, error)
Example ¶
package main
import (
"fmt"
"net/http"
"time"
"github.com/ethanent/ucscclasses"
)
var c = &http.Client{Timeout: time.Second * 5}
func main() {
// You can get a DetailsURL from a search result or elsewhere
exampleDetailsURL := "https://pisa.ucsc.edu/class_search/index.php?action=detail&class_data=YToyOntzOjU6IjpTVFJNIjtzOjQ6IjIyMjAiO3M6MTA6IjpDTEFTU19OQlIiO3M6NToiNDQ1NzkiO30%253D"
details, err := ucscclasses.GetClassDetails(c, exampleDetailsURL)
if err != nil {
panic(err)
}
fmt.Printf("%s %s: %s\n", details.Subject, details.Number, details.Name)
fmt.Println(details.Instructor)
fmt.Printf("Description: %s\n", details.Description)
fmt.Printf("Enrollment: %d / %d\n", details.Enrolled, details.Capacity)
fmt.Printf("Waitlist: %d / %d\n", details.WaitlistTotal, details.WaitlistCapacity)
fmt.Println("Sections:")
for _, ds := range details.DiscussionSections {
fmt.Printf(" %s %s (%d / %d)\n", ds.Name, ds.Location, ds.Enrolled, ds.Capacity)
}
}
type ClassStatus ¶
type ClassStatus string
const ( ClassStatusOpen ClassStatus = "Open" ClassStatusClosedWaitlist ClassStatus = "Waitlist" ClassStatusClosed ClassStatus = "Closed" )
type DiscussionSection ¶
type RegistrationStatus ¶
type RegistrationStatus string
const ( // RegistrationStatusAll includes open and closed courses RegistrationStatusAll RegistrationStatus = "all" // RegistrationStatusOpen only includes open courses RegistrationStatusOpen RegistrationStatus = "O" )
type SearchMethod ¶
type SearchMethod string
const ( SearchMethodEqual SearchMethod = "=" SearchMethodContains SearchMethod = "contains" )
type SearchOptions ¶
type SearchOptions struct {
// Term is required
Term string
// Subject is an optional selector. Use "" to ignore.
Subject string
// Number is an optional selector. Use "" to ignore.
Number string
NumberSearchMethod SearchMethod
// RegistrationStatus is the registrability of a course
// Leave as nil to use RegistrationStatusAll
RegistrationStatus *RegistrationStatus
// GE is an optional selector. Use "" to ignore.
GE string
// Title (title keyword) is an optional selector. Use "" to ignore.
Title string
}
Click to show internal directories.
Click to hide internal directories.