Mercurial > hg > Members > anatofuz > lectable
annotate syllabus/getSyllabus.go @ 3:e4088b031eba
add cmd
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 31 Mar 2020 12:17:52 +0900 |
parents | dccd0dd6cfbc |
children | a0d23f38344d |
rev | line source |
---|---|
2 | 1 package syllabus |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 import ( |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 "bufio" |
2 | 5 "io" |
6 "net/http" | |
3 | 7 "net/url" |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 "os" |
3 | 9 "path" |
10 "path/filepath" | |
2 | 11 "strconv" |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 "strings" |
2 | 13 "time" |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 "github.com/pkg/errors" |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 ) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 const ( |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 monday int = iota |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 tuesday |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 wednesday |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 thursday |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 friday |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 ) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 |
2 | 26 //GetSyllabus is use main function struct. members using download html operation |
27 type GetSyllabus struct { | |
28 year int | |
29 term string | |
30 outputdir string | |
31 } | |
32 | |
33 // LectureDay include day of week (0~4, error -> 5), period, lastpriod (1~6) | |
34 type LectureDay struct { | |
35 DayOfWeek int | |
36 Period int | |
37 LastPeriod int | |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 |
2 | 40 //Lecture ID is ex. 600625001 , Name is プログラミング1, Day is LecutreDay |
41 type Lecture struct { | |
42 ID string | |
43 Name string | |
44 Day *lectureDay | |
45 Teacher string | |
46 } | |
47 | |
48 //CreateGetSyllabus is constructor and initialize from now time | |
49 func CreateGetSyllabus() *GetSyllabus { | |
50 var gs GetSyllabus | |
51 tm := time.Now() | |
3 | 52 //gs.year = tm.Year() |
53 gs.year = 2019 | |
2 | 54 if tm.Month() < 7 { |
55 gs.term = "previous" | |
56 } else { | |
57 gs.term = "latter" | |
58 } | |
3 | 59 gs.term = "previous" |
60 | |
61 gs.outputdir = filepath.Join(strconv.Itoa(gs.year), gs.term) | |
2 | 62 return &gs |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 |
1 | 65 var dayPeriodID = "ctl00_phContents_Detail_lbl_day_period\">" |
66 var lectureNameID = "ctl00_phContents_Detail_lbl_lbl_lct_name_double\">" | |
67 var teacherNameID = "ctl00_phContents_Detail_lbl_syl_staff_name_double\">" | |
68 var endSpan = "</span>" | |
2 | 69 var dayOfWeeklen = len("月") |
1 | 70 |
3 | 71 //"https://tiglon.jim.u-ryukyu.ac.jp/portal/Public/Syllabus/SyllabusSearchStart.aspx?lct_year=2019&lct_cd=610004071&je_cd=1" |
72 var endpoint = "https://tiglon.jim.u-ryukyu.ac.jp" | |
73 | |
2 | 74 //LecIDtoDownloadSyllabus is download from lecture ID |
75 func (g *GetSyllabus) LecIDtoDownloadSyllabus(lectureID string) error { | |
76 var strBuilder strings.Builder | |
77 strBuilder.WriteString(lectureID) | |
78 strBuilder.WriteString(".html") | |
79 | |
3 | 80 putputPath := filepath.Join(g.outputdir, strBuilder.String()) |
81 | |
2 | 82 file, err := os.Create(strBuilder.String()) |
83 defer file.Close() | |
84 | |
85 if err != nil { | |
86 return errors.Wrap("failed create html...") | |
87 } | |
88 | |
89 strBuilder.Reset() | |
90 | |
3 | 91 u, err := url.Parse(endpoint) |
92 if err != nil { | |
93 return err | |
94 } | |
95 | |
96 u.path = path.Join(u.path, "portal", "Public", "Syllabus", "SyllabusSearchStart.aspx") | |
97 q := u.Query() | |
98 q.Set("lect_year", g.year) | |
99 q.Set("lect_cd", lectureID) | |
100 q.Set("je_cd", "1") | |
101 u.RawQuery = q.Encode() | |
102 | |
103 res, err := http.Get(u.String()) | |
2 | 104 defer res.Body.Close() |
105 | |
106 if err != nil { | |
107 return errors.Wrap("failed download html") | |
108 } | |
109 | |
110 _, err := io.Copy(file, res.Body) | |
111 if err != nil { | |
112 return errors.Wrap("failed download html") | |
113 } | |
114 | |
115 return nil | |
116 } | |
117 | |
118 //LecIDwFilePath2LectureStruct is require LectureID (== Lecture.ID), filePath ( syllabus.html path) | |
119 func (g *GetSyllabus) LecIDwFilePath2LectureStruct(lectureID, filePath string) (*lecture, error) { | |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 file, err := os.Open(filePath) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 if err != nil { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 return nil, errors.Wrap(err, "failed open html file") |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 scanner := bufio.NewScanner(file) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 var lec lecture |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 lec.id = lectureID |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 for scanner.Scan() { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 line := scanner.Text() |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 // day Period |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 if i := strings.Index(line, dayPeriodID); i >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 if j := strings.Index(line, endSpan); j >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 i += len(dayPeriodID) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 day := line[i:j] |
2 | 138 lec.day.dayOfWeek, err = kanjiday2int(day[0:dayOfWeeklen]) |
139 if err != nil { | |
140 return nil, errors.Wrap(err, "failed convert day") | |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 } |
2 | 142 lec.day.period, err = strconv.Atoi(day[dayOfWeeklen : dayOfWeeklen+1]) |
143 | |
144 // dayの長さで〜があるかどうかが判定する | |
0
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 continue |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 // lecture name |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 if i := strings.Index(line, lectureNameID); i >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 if j := strings.Index(line, endSpan); j >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 i += len(lectureNameID) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 lec.name = line[i:j] |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 continue |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 //teacher name |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 if i := strings.Index(line, teacherNameID); i >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 if j := strings.Index(line, endSpan); j >= 0 { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 i += len(teacherNameID) |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 lec.teacher = line[i:j] |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 break |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 file.Close() |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 return &lec, nil |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 } |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 func kanjiday2int(kanjiDay string) (int, error) { |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 return 0, nil |
5191dd198bf4
add convertSyllabus method
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 } |