Mercurial > hg > Members > anatofuz > lectable
view cmd_donwload.go @ 22:8d14bbbedf23
genhtml
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 02 Apr 2020 23:39:55 +0900 |
parents | cc568d791a28 |
children |
line wrap: on
line source
package lectable import ( "bufio" "context" "encoding/json" "fmt" "io" "os" "path/filepath" "strconv" "strings" "www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/lectable/syllabus" ) type cmdDownload struct{} func (cd *cmdDownload) name() string { return "download" } func (cd *cmdDownload) description() string { return "donwload html from lecture ids" } func convertPDFJson(jsonPath string) ([]DumpLectureFPDF, error) { f, err := os.Open(jsonPath) if err != nil { return nil, err } br := bufio.NewReader(f) dec := json.NewDecoder(br) var dlf []DumpLectureFPDF err = dec.Decode(&dlf) if err != nil { return nil, err } return dlf, nil } func strToIntDays(s string) (int, int, error) { for dayIndex, dow := range days { if strings.Contains(s, dow) { d, err := strconv.Atoi(s[kanjiDayLen:]) if err != nil { return 0, 0, err } return dayIndex, d, nil } } return 0, 0, nil } func (cd *cmdDownload) run(ctx context.Context, argv []string, outStream, errStream io.Writer) error { fmt.Println("download now!!") dh := syllabus.CreateGetSyllabus() err := checkAndMkdirBuilddir(dh.Outputdir) if err != nil { return err } dlf, err := convertPDFJson(argv[0]) if err != nil { return err } var lecIDS []string //var idToLecPDFJ map[string][]Lec idToLecPDFJ := make(map[string][]Lec, len(dlf)) for _, dl := range dlf { lecIDS = append(lecIDS, dl.Id) //idToLecPDFJ[dl.Id] = append(idToLecPDFJ[dl.Id], Lec{ID: dl.Id, Grades: dl.Grades, isSelect: dl.IsSelect, Place: dl.Place}) le := Lec{ID: dl.Id, Grades: dl.Grades, IsSelect: dl.IsSelect, Place: dl.Place} if dl.Day != "" { dow, dindex, err := strToIntDays(dl.Day) if err != nil { return err } le.DayOfWeek = dow le.Day = []int{dindex} } idToLecPDFJ[dl.Id] = append(idToLecPDFJ[dl.Id], le) } lwps, err := dh.LecIDStoDonwlodSyllabus(ctx, lecIDS, outStream) lectures, err := dh.LectureWPathS2LectureStruct(ctx, lwps, outStream) if err != nil { return err } var lecs []Lec for _, lect := range *lectures { fpds := idToLecPDFJ[lect.ID] for _, fp := range fpds { for _, day := range lect.Day { fp.Name = lect.Name if fp.Day == nil { fp.Day = []int{day.Period} if day.LastPeriod != -1 { fp.Day = append(fp.Day, day.LastPeriod) } fp.DayOfWeek = day.DayOfWeek } fp.Teacher = lect.Teacher lecs = append(lecs, fp) } } } return dumpLecToJson(lecs, dh.Outputdir) } func dumpLecToJson(lec []Lec, outputdir string) error { bytes, err := json.Marshal(lec) if err != nil { return err } fp := filepath.Join(outputdir, "dumpFromPDFWHTML.json") file, err := os.Create(fp) bw := bufio.NewWriter(file) _, err = bw.Write(bytes) if err != nil { return err } bw.Flush() file.Close() return nil } type Lec struct { ID string `json:id` Name string `json:name` Day []int `json:day` DayOfWeek int `json:dayOfWeek` Teacher string `json:teacher` IsSelect bool `json:isSelect` Grades []int `json:grades` Place string `json:place` }