Skip to content

Commit 4279738

Browse files
committed
✨ Implement runGetScript, getSubjectList, getSubject
1 parent b840cf7 commit 4279738

1 file changed

Lines changed: 42 additions & 20 deletions

File tree

src/index.ts

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
import { Faculty, FacultyMap, Subject } from "./types";
1+
import { Faculty, FacultyMap, Subject, SubjectMap } from "./types";
22
import f from "./faculties.json";
3+
import s from "./subjects.json";
34
import axios from "axios";
45
import iconv from "iconv-lite";
5-
const fs = require("fs");
6+
import fs from "fs";
67

78
const faculties = f as FacultyMap;
9+
const subjects = s as SubjectMap;
810

911
export const getFacultyList = (): Faculty[] => {
1012
return Object.entries(faculties).map(([code, { name_en, name_th }]) => ({
@@ -20,19 +22,41 @@ export const getFaculty = (code: string): Faculty | undefined => {
2022
return { code, ...res };
2123
};
2224

23-
export const getSubjectList = async (
24-
facultyCode: string,
25-
): Promise<Subject[] | undefined> => {
25+
export const getSubjectList = (): Subject[] => {
26+
return Object.entries(subjects).map(
27+
([
28+
code,
29+
{ abbr, facultyCode, name, isClosed, openSemester, closeSemester },
30+
]) => ({
31+
code,
32+
abbr,
33+
facultyCode,
34+
name,
35+
isClosed,
36+
openSemester,
37+
closeSemester,
38+
}),
39+
);
40+
};
41+
42+
export const getSubject = (code: string): Subject | undefined => {
43+
if (!(code in subjects)) return;
44+
const res = subjects[code];
45+
return { code, ...res };
46+
};
47+
48+
export const runGetSubject = async (): Promise<Subject[] | undefined> => {
2649
const facultyList = getFacultyList();
2750
const noSubjectFacultyCodeList = ["56", "58", "99", "01"];
2851
const filteredFacultyList = facultyList.filter((f) => {
2952
return !noSubjectFacultyCodeList.includes(f.code);
3053
});
31-
let results: any[] = [];
32-
for (const fc of filteredFacultyList) {
54+
let results;
55+
const subjectData: SubjectMap = {};
56+
for (const f of filteredFacultyList) {
3357
try {
3458
const response = await axios.get(
35-
`https://www.reg.chula.ac.th/document/courseName${fc.code}.txt`,
59+
`https://www.reg.chula.ac.th/document/courseName${f.code}.txt`,
3660
{
3761
responseType: "arraybuffer",
3862
transformResponse: [
@@ -42,31 +66,29 @@ export const getSubjectList = async (
4266
],
4367
},
4468
);
45-
const regex = /(\d+)\s+(\d+)\s+((?:\S+\s)+)\s+(\d\/\d+)(?:\s+)?(\d\/\d+)?\n(?:\s+)?([^\n]*)?\n(?:\s+)?([^\n]*)\n/g;
69+
const regex = /(\d+)\s+(\d+)\s+((?:\S+\s)+)\s+(\d\/\d+)(?:\s+)?(\d\/\d+)?\n(?:\ +)?([^\n]+)?\n(?:\ +)?([^\n]+)?\n/g;
4670
const regexResults: RegExpMatchArray | null = response.data.match(regex);
47-
if (regexResults === null) throw new Error("NULL");
48-
const subjectList = regexResults.map<Subject>((s) => {
71+
if (regexResults === null) throw new Error("regexResult is null");
72+
regexResults.forEach((s) => {
4973
const subject = s.split(regex);
50-
return {
51-
code: subject[2],
52-
facultyCode: fc.code,
53-
abbr: subject[7],
74+
subjectData[subject[2]] = {
75+
facultyCode: f.code,
76+
abbr: subject[3].trim(),
5477
name: {
55-
en: subject[3].trim(),
56-
th: subject[6].trim(),
78+
en: subject[7],
79+
th: subject[6],
5780
},
5881
isClosed: subject[5] !== undefined,
5982
openSemester: subject[4],
6083
closeSemester: subject[5],
6184
};
6285
});
63-
results = results.concat(subjectList);
6486
} catch (e) {
6587
throw e;
6688
}
6789
}
68-
const jsonData = JSON.stringify(results);
69-
fs.writeFile(`subjects.json`, jsonData, function (err: any) {
90+
const jsonData = JSON.stringify(subjectData);
91+
await fs.writeFile(`subjects.json`, jsonData, function (err: any) {
7092
if (err) {
7193
console.log(err);
7294
}

0 commit comments

Comments
 (0)