Fix name processing for FullEntry, use rune instead of letter for directory getter

This commit is contained in:
2023-12-30 11:05:36 -06:00
parent 101900d4bd
commit 764bd0947e

View File

@@ -63,7 +63,6 @@ func Login(username string, password string) error {
"passphrase": {password}, "passphrase": {password},
"log-me-in": {"Log+In"}, "log-me-in": {"Log+In"},
} }
log.Debug().Str("form", form.Encode()).Msg("Form Encoded")
request, _ = http.NewRequest("POST", "https://www.utsa.edu/directory/", strings.NewReader(form.Encode())) request, _ = http.NewRequest("POST", "https://www.utsa.edu/directory/", strings.NewReader(form.Encode()))
ApplyUtsaHeaders(request) ApplyUtsaHeaders(request)
request.Header.Set("Content-Type", "application/x-www-form-urlencoded") request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
@@ -200,7 +199,7 @@ func CheckLoggedIn() (bool, error) {
func GetFullDirectory() ([]Entry, error) { func GetFullDirectory() ([]Entry, error) {
entries := make([]Entry, 0, 500) entries := make([]Entry, 0, 500)
for letter := 'A'; letter <= 'Z'; letter++ { for letter := 'A'; letter <= 'Z'; letter++ {
letterEntries, err := GetDirectoryCached(string(letter)) letterEntries, err := GetDirectoryCached(letter)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to get directory") return nil, errors.Wrap(err, "failed to get directory")
} }
@@ -211,7 +210,7 @@ func GetFullDirectory() ([]Entry, error) {
return entries, nil return entries, nil
} }
func GetDirectoryCached(letter string) ([]Entry, error) { func GetDirectoryCached(letter rune) ([]Entry, error) {
key := fmt.Sprintf("directory:%s", letter) key := fmt.Sprintf("directory:%s", letter)
// Check if cached // Check if cached
@@ -259,7 +258,7 @@ func GetDirectoryCached(letter string) ([]Entry, error) {
} }
// create transaction // create transaction
log.Debug().Str("letter", letter).Str("key", key).Msg("Saving to Directory Cache") log.Debug().Str("letter", string(letter)).Str("key", key).Msg("Saving to Directory Cache")
return txn.Set([]byte(key), []byte(marshalledEntries)) return txn.Set([]byte(key), []byte(marshalledEntries))
}) })
@@ -270,11 +269,11 @@ func GetDirectoryCached(letter string) ([]Entry, error) {
return entries, nil return entries, nil
} }
func GetDirectory(letter string) ([]Entry, error) { func GetDirectory(letter rune) ([]Entry, error) {
// Build the request // Build the request
directoryPageUrl, _ := url.Parse("https://www.utsa.edu/directory/SearchByLastName") directoryPageUrl, _ := url.Parse("https://www.utsa.edu/directory/SearchByLastName")
query := directoryPageUrl.Query() query := directoryPageUrl.Query()
query.Set("abc", letter) query.Set("abc", string(letter))
directoryPageUrl.RawQuery = query.Encode() directoryPageUrl.RawQuery = query.Encode()
// Send the request // Send the request
@@ -380,9 +379,6 @@ func GetFullEntry(id string) (*FullEntry, error) {
// Build the entry from the map // Build the entry from the map
entry := FullEntry{} entry := FullEntry{}
entry.Name = rows["name"]
delete(rows, "name")
entry.Classification = rows["classification"] entry.Classification = rows["classification"]
delete(rows, "classification") delete(rows, "classification")
@@ -412,5 +408,12 @@ func GetFullEntry(id string) (*FullEntry, error) {
entry.Other = rows entry.Other = rows
// Find the name
nameElement := doc.Find("body > #main span.nameBold > strong")
if nameElement.Length() != 1 {
return nil, fmt.Errorf("could not find name: %d elements", nameElement.Length())
}
entry.Name = strings.TrimSpace(nameElement.Text())
return &entry, nil return &entry, nil
} }