Skip to content

Commit 574595a

Browse files
authored
Merge pull request #138 from Yogeb-tech/issue-135
Uploader for degrees
2 parents 0f972f9 + 71e631b commit 574595a

3 files changed

Lines changed: 52 additions & 7 deletions

File tree

main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func main() {
4949
// Flag for academic calendar scraping
5050
academicCalendars := flag.Bool("academicCalendars", false, "Alongside -scrape, -parse, or -upload, signifies that the academic calendars should be scraped/parsed/uploaded.")
5151
// Flag for degree scraping and parsing
52-
degrees := flag.Bool("degrees", false, "Alongside -scrape or -parse, signifies that the degrees should be scraped/parsed.")
52+
degrees := flag.Bool("degrees", false, "Alongside -scrape, -parse, or -upload. Signifies that the degrees should be scraped/parsed/uploaded.")
5353

5454
// Flags for parsing
5555
parse := flag.Bool("parse", false, "Puts the tool into parsing mode.")
@@ -154,6 +154,8 @@ func main() {
154154
uploader.UploadAcademicCalendars(*inDir)
155155
case *scrapeDiscounts:
156156
uploader.UploadDiscounts(*inDir)
157+
case *degrees:
158+
uploader.UploadDegrees(*inDir)
157159
default:
158160
uploader.Upload(*inDir, *replace, *staticOnly)
159161
}

parser/degreeParser.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ func ParseDegrees(inDir string, outDir string) {
4949
utils.VPrintf("Extracted %d programs", len(allPrograms))
5050

5151
// Write to output file
52-
utils.WriteJSON(filepath.Join(outDir, "degrees.json"), allPrograms)
52+
err = utils.WriteJSON(filepath.Join(outDir, "degrees.json"), allPrograms)
53+
if err != nil {
54+
log.Fatal("Failed to upload json")
55+
}
5356

5457
utils.VPrintf("Successfully wrote degrees to %s/degrees.json", outDir)
5558
}
@@ -103,11 +106,10 @@ func extractProgram(selection *goquery.Selection, programs *[]schema.AcademicPro
103106
areasOfInterest := selection.Find("div.areas_of_interest.d-none").First()
104107

105108
newProgram := schema.AcademicProgram{
106-
Title: strings.TrimSpace(title.Text()),
107-
School: strings.TrimSpace(school.Text()),
108-
DegreeOptions: degrees,
109-
// Normalize to lowercase and split comma-separated values
110-
AreasOfInterest: strings.Split(strings.TrimSpace(strings.ToLower(areasOfInterest.Text())), ", "),
109+
Title: strings.TrimSpace(title.Text()),
110+
School: strings.TrimSpace(school.Text()),
111+
DegreeOptions: degrees,
112+
AreasOfInterest: parseAreasOfInterest(areasOfInterest.Text()),
111113
}
112114
utils.VPrintf(" Areas of interest: %d topics", len(newProgram.AreasOfInterest))
113115

@@ -132,3 +134,11 @@ func generateAllCombinations() []string {
132134

133135
return combinations
134136
}
137+
138+
func parseAreasOfInterest(areasOfInterest string) []string {
139+
trimmed := strings.TrimSpace(areasOfInterest)
140+
if trimmed == "" {
141+
return []string{}
142+
}
143+
return strings.Split(trimmed, ", ")
144+
}

uploader/degreesUploader.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package uploader
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"os"
8+
"time"
9+
10+
"github.com/UTDNebula/nebula-api/api/schema"
11+
)
12+
13+
const DEGREES_FILE string = "degrees.json"
14+
15+
func UploadDegrees(inDir string) {
16+
client := connectDBFunc()
17+
18+
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5)
19+
defer cancel()
20+
21+
// Open data file for reading
22+
fptr, err := os.Open(fmt.Sprintf("%s/"+DEGREES_FILE, inDir))
23+
if err != nil {
24+
if os.IsNotExist(err) {
25+
log.Printf("File not found. Skipping %s", DEGREES_FILE)
26+
return
27+
}
28+
log.Panic(err)
29+
}
30+
defer fptr.Close()
31+
32+
UploadData[schema.AcademicProgram](client, ctx, fptr, true)
33+
}

0 commit comments

Comments
 (0)