changeset 21:1aa824c6b319

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 02 Apr 2020 21:24:24 +0900
parents caf842947bef
children 8d14bbbedf23
files 2020/previous/jq_dfpdf.json cmd_dumphtml.go dumphtml.go lectable.go static_json/teacher.json
diffstat 5 files changed, 850 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2020/previous/jq_dfpdf.json	Thu Apr 02 21:24:24 2020 +0900
@@ -0,0 +1,581 @@
+[
+  {
+    "ID": "617009001",
+    "Name": "プロジェクトデザイン",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "山田 孝治",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "610038001",
+    "Name": "技術英語Ⅲ",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "小野 尋子",
+    "Grades": [
+      4
+    ],
+    "Place": "共4-505"
+  },
+  {
+    "ID": "R00079001",
+    "Name": "ソフトウェアシステム論",
+    "Day": [
+      4
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "河野 真治",
+    "Grades": [
+      5
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "101501091",
+    "Name": "大学英語 09組",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "宮城和文",
+    "Grades": [
+      1
+    ],
+    "Place": "共3-403"
+  },
+  {
+    "ID": "101501091",
+    "Name": "大学英語 09組",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "宮城和文",
+    "Grades": [
+      1
+    ],
+    "Place": "共3-201"
+  },
+  {
+    "ID": "617015001",
+    "Name": "ディジタル回路",
+    "Day": [
+      4
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "吉田 たけお",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "617038001",
+    "Name": "ソフトウエア開発演習III",
+    "Day": [
+      3
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "河野 真治",
+    "Grades": [
+      3
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "R00087001",
+    "Name": "知能ロボット論",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "山田 孝治",
+    "Grades": [
+      5
+    ],
+    "Place": "地創棟508"
+  },
+  {
+    "ID": "100826081",
+    "Name": "微分積分学ST(スタンダードコース)Ⅰ 08組",
+    "Day": [
+      3
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "林正史",
+    "Grades": [
+      1
+    ],
+    "Place": "共1-217"
+  },
+  {
+    "ID": "R00409001",
+    "Name": "システムアーキテクチャ論",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "和田 知久",
+    "Grades": [
+      5
+    ],
+    "Place": "地創棟503"
+  },
+  {
+    "ID": "617022001",
+    "Name": "ソフトウェア工学",
+    "Day": [
+      4
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "河野 真治",
+    "Grades": [
+      3
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "610013071",
+    "Name": "キャリアデザイン 05組",
+    "Day": [
+      4,
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "遠藤 聡志",
+    "Grades": [
+      3
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "R01423001",
+    "Name": "プロジェクト・マネジメント演習",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "名嘉村 盛和",
+    "Grades": [
+      5
+    ],
+    "Place": "地創棟508"
+  },
+  {
+    "ID": "610001041",
+    "Name": "キャリアデザイン入門 04組",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "清水 肇, 渡嘉敷 健",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-222"
+  },
+  {
+    "ID": "617006001",
+    "Name": "情報ネットワークⅠ",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "長田 智和",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "617003011",
+    "Name": "知能情報実験Ⅰ 01組",
+    "Day": [
+      3,
+      4
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "吉田 たけお, 宮里 智樹, 赤嶺 有平, 國田樹",
+    "Grades": [
+      2
+    ],
+    "Place": "地創棟508"
+  },
+  {
+    "ID": "610016001",
+    "Name": "技術英語Ⅰ",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "比嘉 広樹",
+    "Grades": [
+      3
+    ],
+    "Place": "工4-111"
+  },
+  {
+    "ID": "617039001",
+    "Name": "ICT実践英語I",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "比嘉健伸",
+    "Grades": [
+      4
+    ],
+    "Place": "共4-305"
+  },
+  {
+    "ID": "617003021",
+    "Name": "知能情報実験Ⅰ 02組",
+    "Day": [
+      3,
+      4
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "吉田 たけお, 宮里 智樹, 赤嶺 有平, 國田樹",
+    "Grades": [
+      2
+    ],
+    "Place": "地創棟508"
+  },
+  {
+    "ID": "610001031",
+    "Name": "キャリアデザイン入門 03組",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "清水 肇, 渡嘉敷 健",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-221"
+  },
+  {
+    "ID": "101501081",
+    "Name": "大学英語 08組",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "富里明美",
+    "Grades": [
+      1
+    ],
+    "Place": "共3-205"
+  },
+  {
+    "ID": "101501081",
+    "Name": "大学英語 08組",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "富里明美",
+    "Grades": [
+      1
+    ],
+    "Place": "共3-403"
+  },
+  {
+    "ID": "R00084001",
+    "Name": "知能システム論",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "姜 東植",
+    "Grades": [
+      5
+    ],
+    "Place": "地創棟504"
+  },
+  {
+    "ID": "610001011",
+    "Name": "キャリアデザイン入門 01組",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "清水 肇, 渡嘉敷 健",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-221"
+  },
+  {
+    "ID": "610012071",
+    "Name": "技術者の倫理 03組",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "和田 知久",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-221"
+  },
+  {
+    "ID": "617021001",
+    "Name": "知能情報実験III",
+    "Day": [
+      3,
+      4
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "國田樹, 全教員",
+    "Grades": [
+      3
+    ],
+    "Place": "地創棟508"
+  },
+  {
+    "ID": "100408031",
+    "Name": "物理学Ⅰ 03組",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "深水 孝則",
+    "Grades": [
+      4
+    ],
+    "Place": "共1-118"
+  },
+  {
+    "ID": "617023001",
+    "Name": "数理計画とアルゴリズム",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "長山 格",
+    "Grades": [
+      3
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "617028001",
+    "Name": "ヒューマンコンピュータインタラクション",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "赤嶺 有平",
+    "Grades": [
+      3
+    ],
+    "Place": "工2-313"
+  },
+  {
+    "ID": "610042001",
+    "Name": "情報科教育法B",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "岡﨑 威生",
+    "Grades": [
+      4
+    ],
+    "Place": "工1-509"
+  },
+  {
+    "ID": "610000071",
+    "Name": "工学基礎演習 06組",
+    "Day": [
+      3,
+      4
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "國田樹, 遠藤 聡志",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "R01672001",
+    "Name": "データマイニング論",
+    "Day": [
+      4
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "當間 愛晃",
+    "Grades": [
+      5
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "610002071",
+    "Name": "工業数学Ⅰ 07組",
+    "Day": [
+      3,
+      4
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "山田 孝治",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "617005001",
+    "Name": "アルゴリズムとデータ構造",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 2,
+    "Teacher": "名嘉村 盛和",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "610019001",
+    "Name": "産業社会学原論Ⅰ",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "玉城 史朗",
+    "Grades": [
+      3
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "610004071",
+    "Name": "プログラミングⅠ",
+    "Day": [
+      1
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "當間 愛晃",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "610005071",
+    "Name": "基礎数学Ⅰ 06組",
+    "Day": [
+      3
+    ],
+    "DayOfWeek": 3,
+    "Teacher": "岡﨑 威生, 國田樹",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "610001021",
+    "Name": "キャリアデザイン入門 02組",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "清水 肇, 渡嘉敷 健",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-222"
+  },
+  {
+    "ID": "617000001",
+    "Name": "プログラミング演習Ⅰ",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 4,
+    "Teacher": "赤嶺 有平",
+    "Grades": [
+      1
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "617007001",
+    "Name": "コンピュータシステム",
+    "Day": [
+      2
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "姜 東植",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "617016001",
+    "Name": "情報処理技術概論",
+    "Day": [
+      3
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "宮里 智樹",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-322"
+  },
+  {
+    "ID": "R01768001",
+    "Name": "UI/UX論",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "赤嶺 有平",
+    "Grades": [
+      5
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "617008001",
+    "Name": "データサイエンス基礎",
+    "Day": [
+      1,
+      2
+    ],
+    "DayOfWeek": 1,
+    "Teacher": "岡﨑 威生",
+    "Grades": [
+      2
+    ],
+    "Place": "工1-321"
+  },
+  {
+    "ID": "R01610011",
+    "Name": "科学者の倫理 01組",
+    "Day": [
+      5
+    ],
+    "DayOfWeek": 0,
+    "Teacher": "當間 愛晃, 全教員",
+    "Grades": [
+      5
+    ],
+    "Place": "工2-224"
+  }
+]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmd_dumphtml.go	Thu Apr 02 21:24:24 2020 +0900
@@ -0,0 +1,50 @@
+package lectable
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"io"
+	"path/filepath"
+)
+
+type cmdDumpHTML struct{}
+
+func (cdh *cmdDumpHTML) name() string {
+	return "dumphtml"
+}
+
+func (cdh *cmdDumpHTML) description() string {
+	return "generate lectable html"
+}
+
+func (cdh *cmdDumpHTML) run(ctx context.Context, argv []string, outStream, errStream io.Writer) error {
+	if len(argv) == 0 {
+		return errors.New("Usage: ./lectable dumphtml lecture.json")
+	}
+	teacherToURLMap, err := convertStaticTeacherToMap(filepath.Join("static_json", "teacher.json"))
+	if err != nil {
+		return err
+	}
+	dlfpdf, err := convertLec(argv[0])
+	if err != nil {
+		return err
+	}
+	grlectures, err := convertdumpHTMLSTR(dlfpdf, *teacherToURLMap)
+	if err != nil {
+		return err
+	}
+	for doIndex, dayList := range grlectures.B1 {
+		fmt.Printf("doindex : %d\n", doIndex)
+		for i, v := range dayList {
+			fmt.Printf("index : %d\n", i)
+			if v == nil {
+				fmt.Println("nil")
+				continue
+			}
+			fmt.Println(*v)
+		}
+	}
+	//dumpHTML(grlectures, outStream)
+	return nil
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dumphtml.go	Thu Apr 02 21:24:24 2020 +0900
@@ -0,0 +1,156 @@
+package lectable
+
+import (
+	"bufio"
+	"encoding/json"
+	"io"
+	"os"
+	"strings"
+)
+
+/*
+<td class="required"><a href="http://ie.u-ryukyu.ac.jp/syllabus/2019/early/617009001.html">プロジェクトデザイン</a>
+<a href="http://ie.u-ryukyu.ac.jp/%7koji/pw/" target="_blank" rel="noopener noreferrer">山田 孝治</a>
+<span style="font-size: 8pt;">工1-321</span></td>
+
+<td class="select"><a href="http://ie.u-ryukyu.ac.jp/syllabus/2019/early/617016001.html">情報処理技術概論</a>
+<a>宮里 智樹</a>
+<span style="font-size: 8pt;">工1-322</span></td>
+*/
+
+type teacherSTR struct {
+	name string
+	url  string
+}
+
+type TeacherFromJSON struct {
+	Teacher []string `json:"teacher"`
+}
+
+type dumpHTMLSTR struct {
+	ID       string
+	Name     string
+	Teacher  teacherSTR
+	Place    string
+	IsSelect bool
+	NextTerm *dumpHTMLSTR
+}
+
+type teacherNameToURL map[string]string
+
+func convertStaticTeacherToMap(jsonPath string) (*teacherNameToURL, error) {
+	f, err := os.Open(jsonPath)
+	if err != nil {
+		return nil, err
+	}
+	br := bufio.NewReader(f)
+	dec := json.NewDecoder(br)
+	var teacherFJson []TeacherFromJSON
+	err = dec.Decode(&teacherFJson)
+	if err != nil {
+		return nil, err
+	}
+
+	tnametoURL := make(teacherNameToURL, len(teacherFJson))
+
+	for _, tcfj := range teacherFJson {
+		tnametoURL[tcfj.Teacher[0]] = tcfj.Teacher[1]
+	}
+	return &tnametoURL, nil
+}
+
+func convertLec(jsonPath string) ([]Lec, error) {
+	f, err := os.Open(jsonPath)
+	if err != nil {
+		return nil, err
+	}
+	br := bufio.NewReader(f)
+	dec := json.NewDecoder(br)
+	var lecs []Lec
+	err = dec.Decode(&lecs)
+	if err != nil {
+		return nil, err
+	}
+	return lecs, nil
+}
+
+/*
+ */
+/*
+type dumpHTMLSTR struct {
+	ID       string
+	Name     string
+	Teacher  teacherSTR
+	Place    string
+	IsSelect bool
+	NextTerm *DumpLectureFPDF
+}
+*/
+
+type GradeLecturesArray [6][5][5]*dumpHTMLSTR
+
+type GradeLectures struct {
+	B1  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+	B2  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+	B3  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+	B4  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+	M   *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+	OLD *[5][5]*dumpHTMLSTR //[ day of week ] [period]
+}
+
+func convertdumpHTMLSTR(lecs []Lec, teacherToJSON teacherNameToURL) (*GradeLectures, error) {
+	glecturesArray := new(GradeLecturesArray)
+	for _, lec := range lecs {
+		grade := lec.Grades[0] //NOTE: now, grade elements is always one
+		grade--
+
+		teacherURL := teacherToJSON[lec.Teacher]
+
+		lTeacher := teacherSTR{
+			name: lec.Teacher,
+			url:  teacherURL,
+		}
+		for _, day := range lec.Day {
+			dhstr := dumpHTMLSTR{
+				ID:       lec.ID,
+				Name:     lec.Name,
+				Teacher:  lTeacher,
+				Place:    lec.Place,
+				IsSelect: lec.isSelect,
+				NextTerm: nil,
+			}
+			day--
+			if glecturesArray[grade][lec.DayOfWeek][day] != nil {
+				if strings.Contains(glecturesArray[grade][lec.DayOfWeek][day].Name, "大学英語") {
+					var strBuilder strings.Builder
+					strBuilder.WriteString(dhstr.Teacher.name)
+					strBuilder.WriteString("/")
+					strBuilder.WriteString(glecturesArray[grade][lec.DayOfWeek][day].Teacher.name)
+					glecturesArray[grade][lec.DayOfWeek][day].Teacher.name = strBuilder.String()
+					strBuilder.Reset()
+
+					strBuilder.WriteString(dhstr.Place)
+					strBuilder.WriteString("/")
+					strBuilder.WriteString(glecturesArray[grade][lec.DayOfWeek][day].Place)
+					glecturesArray[grade][lec.DayOfWeek][day].Place = strBuilder.String()
+					continue
+				}
+				glecturesArray[grade][lec.DayOfWeek][day].NextTerm = &dhstr
+				continue
+			}
+			glecturesArray[grade][lec.DayOfWeek][day] = &dhstr
+		}
+	}
+	glectures := new(GradeLectures)
+	glectures.B1 = &glecturesArray[0]
+	glectures.B2 = &glecturesArray[1]
+	glectures.B3 = &glecturesArray[2]
+	glectures.B4 = &glecturesArray[3]
+	glectures.M = &glecturesArray[4]
+
+	return glectures, nil
+}
+
+func dumpHTML(grlectures *GradeLectures, writer io.Writer) error {
+	return nil
+}
--- a/lectable.go	Thu Apr 02 08:53:36 2020 +0900
+++ b/lectable.go	Thu Apr 02 21:24:24 2020 +0900
@@ -16,6 +16,7 @@
 	subCommands = []cmd{
 		&cmdDownload{},
 		&cmdPDF{},
+		&cmdDumpHTML{},
 	}
 	dispatch          = make(map[string]cmd, len(subCommands))
 	maxSubcommandName int
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/static_json/teacher.json	Thu Apr 02 21:24:24 2020 +0900
@@ -0,0 +1,62 @@
+[
+  {
+    "teacher": [
+      "長山 格",
+      "https://ie.u-ryukyu.ac.jp/nagayama-laboratory/"
+    ]
+  },
+  {
+    "teacher": [
+      "河野 真治",
+      "http://www.ie.u-ryukyu.ac.jp/%7Ekono/"
+    ]
+  },
+  {
+    "teacher": [
+      "山田 孝治",
+      "http://ie.u-ryukyu.ac.jp/%7Ekoji/pw"
+    ]
+  },
+  {
+    "teacher": [
+      "國田 樹",
+      "https://ie.u-ryukyu.ac.jp/kunita/"
+    ]
+  },
+  {
+    "teacher": [
+      "岡﨑 威生",
+      "http://www.ie.u-ryukyu.ac.jp/%7Eokazaki"
+    ]
+  },
+  {
+    "teacher": [
+      "和田 知久",
+      "http://www.ie.u-ryukyu.ac.jp/%7Ewada/"
+    ]
+  },
+  {
+    "teacher": [
+      "長田 智和",
+      "http://n-lab.info/"
+    ]
+  },
+  {
+    "teacher": [
+      "名嘉村 盛和",
+      "https://ie.u-ryukyu.ac.jp/morikazu/"
+    ]
+  },
+  {
+    "teacher": [
+      "當間 愛晃",
+      "http://www.ie.u-ryukyu.ac.jp/%7Etnal"
+    ]
+  },
+  {
+    "teacher": [
+      "赤嶺 有平",
+      "https://sites.google.com/ie.u-ryukyu.ac.jp/akamine-lab/%E3%83%9B%E3%83%BC%E3%83%A0"
+    ]
+  }
+]