comcigan-parser-edited

Parse timetable data from comcigan.com

Usage no npm install needed!

<script type="module">
  import comciganParserEdited from 'https://cdn.skypack.dev/comcigan-parser-edited';
</script>

README

comcigan-parser

πŸ“˜πŸ•˜ μ»΄μ‹œκ°„ μ•Œλ¦¬λ―Έ μ‹œκ°„ν‘œ νŒŒμ‹± 라이브러리 μž…λ‹ˆλ‹€.
λ³Έ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ»΄μ‹œκ°„ ν™ˆνŽ˜μ΄μ§€μ—μ„œ λ“±λ‘λœ ν•™κ΅μ˜ μ‹œκ°„ν‘œ 데이터λ₯Ό νŒŒμ‹±ν•˜μ—¬ μ œκ³΅ν•©λ‹ˆλ‹€.

κΈ°λŠ₯

  • 학ꡐλͺ… μž…λ ₯ ν›„ λ°”λ‘œ μ‚¬μš© κ°€λŠ₯
  • ν•™κΈ‰ μ‹œκ°„ν‘œ 데이터 제곡

정보

ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ»΄μ‹œκ°„ μ‹œκ°„ν‘œ μ›Ήμ‚¬μ΄νŠΈ(개발 쀑)λ₯Ό μœ„ν•΄ μ΄κ·Όν˜λ‹˜μ˜ comcigan-parser λ₯Ό μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ»΄μ‹œκ°„ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” ν•™κ΅μ˜ μ‹œκ°„ν‘œ 데이터λ₯Ό μ‰½κ²Œ μˆ˜μ§‘ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ»΄μ‹œκ°„μΈ‘μ˜ μ†ŒμŠ€μ½”λ“œ λ³€κ²½μœΌλ‘œ 인해 μ‹œκ°„ν‘œ 데이터 νŒŒμ‹±μ΄ λΆˆκ°€λŠ₯ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ λ°œμƒν•  경우 μ—¬κΈ°λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”

(주의!) λ³Έ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λΉ„κ³΅μ‹μ μœΌλ‘œ μ»΄μ‹œκ°„ μ„œλΉ„μŠ€μ˜ 데이터λ₯Ό νŒŒμ‹±ν•˜λ©°, 상업적인 μš©λ„λ‘œ μ‚¬μš©ν•˜λ‹€ λ¬Έμ œκ°€ λ°œμƒν•  경우 μ±…μž„μ„ 지지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ„€μΉ˜ν•˜κΈ°

npm i comcigan-parser

개발 λ¬Έμ„œ

Timetable

Timetable 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

const Timetable = require("comcigan-parser");
new Timetable();

(Method) Timetable.init

μΈμŠ€ν„΄μŠ€ 정보λ₯Ό μ΄ˆκΈ°ν™” ν•©λ‹ˆλ‹€.
μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ μ‚¬μš©μž 섀정을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.

Parameter Type Required
option any X

μ˜΅μ…˜ μ •λ³΄λŠ” μ•„λž˜ ν‘œ μ°Έκ³ 

Option Value default
firstNames array ['κΉ€', 'λ°•', '이', '솑']
maxGrade number 3
timetableThreshold number 30000
  • firstNames - ꡐ사 이름 μΆ”μΆœ μ‹œ μ°Έκ³ ν•  성씨 λͺ©λ‘μž…λ‹ˆλ‹€.
  • maxGrade - μ΅œλŒ€ 학년을 μ§€μ •ν•©λ‹ˆλ‹€.
  • timetableThreshold - μ‹œκ°„ν‘œ 데이터 μž„κ³„κ°’
    • 응닡 λ°μ΄ν„°λŠ” [0, 0, 0, 0, 0], [0, 10324, 52201, 8909, 0] 이와 같은 ν˜•μ‹μœΌλ‘œ μˆ˜μ§‘λ˜λ©° 각 μš”μ†Œλ₯Ό λͺ¨λ‘ λ”ν•œ 값이 μ§€μ •ν•œ μž„κ³„κ°’μ„ λ„˜μ„ 경우 ν•΄λ‹Ή 값을 μ‹œκ°„ν‘œ λ°μ΄ν„°λ‘œ μ‚¬μš©ν•¨
    • λΉ„μ–΄μžˆλŠ” 데이터 ([0, 0, 0, 0, 0])λ₯Ό ν•„ν„°λ§ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

Return - Promise<any>

const timetable = new Timetable();
timetable.init(option);

(Method) Timetable.getTimetable

μ§€μ •ν•œ ν•™κ΅μ˜ μ‹œκ°„ν‘œ 데이터λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

Return - Promise<any>

timetable.getTimetable();

(Method) Timetable.getClassTime

각 κ΅μ‹œλ³„ μˆ˜μ—… μ‹œμž‘/μ’…λ£Œ μ‹œκ°„μ •λ³΄λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

Return - Array<string>

timetable.getClassTime();

μΆ”κ°€λœ κΈ°λŠ₯

(Method) Timetable.searchSchool - 좔가됨

μž…λ ₯된 ν‚€μ›Œλ“œλ₯Ό 톡해 학ꡐλ₯Ό μ‘°νšŒν•˜μ—¬ κ²°κ³Όλ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.

μ»΄μ‹œκ°„μ— λ“±λ‘λœ 학ꡐ가 아닐 경우 κ²€μƒ‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Parameter Type Required
keyword string O

Return - Object

timetable.searchSchool(keyword);

μ‚¬μš© 방법

Timetable μΈμŠ€ν„΄μŠ€ 생성

comcigan-parser λͺ¨λ“ˆμ„ 뢈러온 ν›„ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
생성 ν›„ λ°˜λ“œμ‹œ init(option)λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ΄ˆκΈ°ν™” ν•©λ‹ˆλ‹€.

const Timetable = require("comcigan-parser");
const timetable = new Timetable();

timetable.init(option).then(() => {
  // μ΄ˆκΈ°ν™” μ™„λ£Œ..
});

학ꡐ μ„€μ •

μ»΄μ‹œκ°„μ— λ“±λ‘λ˜μ–΄μžˆλŠ” 학ꡐλ₯Ό κ²€μƒ‰ν•˜κ³  μΈμŠ€ν„΄μŠ€μ— λ“±λ‘ν•©λ‹ˆλ‹€.

학ꡐ가 μ—¬λŸ¬κ°œ μ‘°νšŒλ˜κ±°λ‚˜ 검색 κ²°κ³Όκ°€ μ—†λŠ” 경우 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€.

timetable.setSchool("κ΄‘λͺ…κ²½μ˜νšŒκ³„κ³ λ“±ν•™κ΅").then((result) => {
  console.log(result); //true
});

timetable.setSchool("ν…ŒμŠ€νŠΈ").then((result) => {
  console.log(result); //κ²€μƒ‰λœ 학ꡐ가 μ—†μŠ΅λ‹ˆλ‹€.
});

timetable.setSchool("우").then((result) => {
  console.log(result); //κ²€μƒ‰λœ 학ꡐ가 λ§ŽμŠ΅λ‹ˆλ‹€. 더 μžμ„Έν•œ 학ꡐλͺ…을 μž…λ ₯ν•΄μ£Όμ„Έμš”. 검색 κ²°κ³Ό 수: ${searchData.length}
});

μ‹œκ°„ν‘œ 쑰회

λ“±λ‘ν•œ ν•™κ΅μ˜ μ‹œκ°„ν‘œ 데이터λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

timetable.getTimetable().then((result) => {
  console.log(result);

  // result[ν•™λ…„][반][μš”μΌ][κ΅μ‹œ]
  // μš”μΌ: (μ›”: 0 ~ 금: 4)
  // κ΅μ‹œ: 1κ΅μ‹œ(0), 2κ΅μ‹œ(1), 3κ΅μ‹œ(2)..
  // 3ν•™λ…„ 8반 ν™”μš”μΌ 2κ΅μ‹œ μ‹œκ°„ν‘œ
  console.log(result[3][8][1][1]);
});

μˆ˜μ—…μ‹œκ°„ 정보 쑰회

timetable.getClassTime("κ΄‘λͺ…κ²½μ˜νšŒκ³„κ³ λ“±ν•™κ΅").then((result) => {
  console.log(result); //κ΄‘λͺ…κ²½μ˜νšŒκ³„κ³ λ“±ν•™κ΅
});

timetable.getClassTime("ν…ŒμŠ€νŠΈ").then((result) => {
  console.log(result); //κ²€μƒ‰λœ 학ꡐ가 μ—†μŠ΅λ‹ˆλ‹€.
});

timetable.getClassTime("우").then((result) => {
  console.log(result); //κ²€μƒ‰λœ 학ꡐ가 λ§ŽμŠ΅λ‹ˆλ‹€. 더 μžμ„Έν•œ 학ꡐλͺ…을 μž…λ ₯ν•΄μ£Όμ„Έμš”. 검색 κ²°κ³Ό 수: ${searchData.length}
});

학ꡐ 쑰회

const time = timetable.searchSchool("");
console.log(time);

/*
[ '1(09:10)',
  '2(10:10)',
  '3(11:10)',
  '4(12:10)',
  '5(13:50)',
  '6(14:50)',
  '7(15:50)',
  '8(16:50)' ]
*/

μ‚¬μš© 예제

const Timetable = require("comcigan-parser");
const timetable = new Timetable();

const test = async () => {
  await timetable.init();
  await timetable.setSchool("κ΄‘λͺ…κ²½μ˜νšŒκ³„κ³ λ“±ν•™κ΅");

  // 전ꡐ μ‹œκ°„ν‘œ 정보 쑰회
  const result = await timetable.getTimetable();
  console.log(result);

  // 각 κ΅μ‹œλ³„ μˆ˜μ—… μ‹œμž‘/μ’…λ£Œ μ‹œκ°„ 정보 쑰회
  const time = timetable.getClassTime();
  console.log(time);
};

데이터 ν˜•μ‹

μ‹œκ°„ν‘œ 데이터

{
  "1": {
    // 1ν•™λ…„
    "1": [ // 1반
      [ // μ›”μš”μΌ μ‹œκ°„ν‘œ
        {
          grade: 1,                   // ν•™λ…„
          class: 1,                   // 반
          weekday: 1,                 // μš”μΌ (1: μ›” ~ 5: 금)
          weekdayString: 'μ›”',        // μš”μΌ λ¬Έμžμ—΄
          class_time: 1,              // κ΅μ‹œ
          code: '5644',               // μˆ˜μ—… μ½”λ“œ
          teacher: '이희*',           // μ„ μƒλ‹˜ 성함
          subject: 'μ‹€μš©λΉ„μ¦ˆλ‹ˆμŠ€μ˜μ–΄'  // κ³Όλͺ©λͺ…
        },
        {
          grade: 1,
          class: 1,
          weekday: 1,
          weekdayString: 'μ›”',
          class_time: 2,
          code: '1606',
          teacher: 'κ°•μ—°*',
          subject: 'μ§„λ‘œν™œλ™'
        }
      ],
      [ν™”μš”μΌμ‹œκ°„ν‘œ],
      [μˆ˜μš”μΌμ‹œκ°„ν‘œ],
      [λͺ©μš”μΌμ‹œκ°„ν‘œ],
      [κΈˆμš”μΌμ‹œκ°„ν‘œ]
    ],
    "2": [ // 2반
      [μ›”μš”μΌμ‹œκ°„ν‘œ],
      [ν™”μš”μΌμ‹œκ°„ν‘œ],
      [μˆ˜μš”μΌμ‹œκ°„ν‘œ],
      [λͺ©μš”μΌμ‹œκ°„ν‘œ],
      [κΈˆμš”μΌμ‹œκ°„ν‘œ]
    ],
    "3": [
      [], [], [], [], []
    ],
    ...
  },
  "2": {
    // 2ν•™λ…„
  },
  "3": {
    // 3ν•™λ…„
  }
}
timetable.getTimetable().then((result) => {
  // 3ν•™λ…„ 8반 μ‹œκ°„ν‘œ (μ›” ~ 금)
  console.log(result[3][8]);

  // 1ν•™λ…„ 1반 μ›”μš”μΌ μ‹œκ°„ν‘œ
  console.log(result[1][1][0]);

  // 2ν•™λ…„ 5반 κΈˆμš”μΌ 3κ΅μ‹œ μ‹œκ°„ν‘œ
  console.log(result[2][5][4][2]);
});

μˆ˜μ—…μ‹œκ°„ 정보

[
  "1(09:10)",
  "2(10:10)",
  "3(11:10)",
  "4(12:10)",
  "5(13:50)",
  "6(14:50)",
  "7(15:50)",
  "8(16:50)",
];

문제 μ‹ κ³ 

μ‹œκ°„ν‘œ νŒŒμ‹±μ΄ λ˜μ§€ μ•Šκ±°λ‚˜ λ¬Έμ œκ°€ λ°œμƒν•œ 경우 이슈λ₯Ό λ‚¨κ²¨μ£Όμ„Έμš”.

변경사항

  • 0.3.0
    • searchSchool λ©”μ†Œλ“œ μΆ”κ°€ ( μž…λ ₯된 ν‚€μ›Œλ“œλ₯Ό 톡해 학ꡐ 쑰회 ) -μ°Έμ‘°

  • 0.2.0
    • getClassTime λ©”μ†Œλ“œ μΆ”κ°€ (각 κ΅μ‹œλ³„ μˆ˜μ—… μ‹œμž‘/μ’…λ£Œ μ‹œκ°„ 정보) - μ°Έμ‘°
  • 0.1.1
    • tempSave μ˜΅μ…˜ 문제 μˆ˜μ •
  • 0.1.0
    • tempSave μ˜΅μ…˜ μ‚­μ œ
    • μ‹œκ°„ν‘œ μΆ”μΆœ 데이터 μž„κ³„κ°’ μ˜΅μ…˜ μΆ”κ°€ (μžμ„Έν•œ 사항은 μ—¬κΈ° μ°Έμ‘°)
  • 0.0.3
    • 데이터 νŒŒμ‹± 문제 μˆ˜μ •
  • 0.0.2
    • 개발 λ¬Έμ„œ μΆ”κ°€
    • init의 κΈ°λ³Έ μ˜΅μ…˜ 문제 μˆ˜μ •
  • 0.0.1 - 첫 번째 릴리즈!