ππ λ³Έ λΌμ΄λΈλ¬λ¦¬λ Node.js
νκ²½μμ μ¬μ©ν μ μλ μ»΄μκ° μ리미 μκ°ν νμ± λΌμ΄λΈλ¬λ¦¬ μ
λλ€.
λ³Έ λΌμ΄λΈλ¬λ¦¬λ μ»΄μκ° ννμ΄μ§μμ λ±λ‘λ νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό νμ±νμ¬ μ 곡ν©λλ€.
맀주 μμμΌ 09μμ λ³Έ λΌμ΄λΈλ¬λ¦¬ λμ μ¬λΆλ₯Ό νμΈν©λλ€. μ healthμ μνκ° passing
μ΄ μλλΌλ©΄ μ»΄μκ° μ¬μ΄νΈ λ³κ²½, μμ€μ½λ λ³κ²½ λ±μ λ¬Έμ κ° λ°μνλ€λ μλ―Έμ΄λ μ΄μ μ λ¬ λΆνλ립λλ€.
- νκ΅λͺ μ λ ₯ ν λ°λ‘ μ¬μ© κ°λ₯
- νκΈ μκ°ν λ°μ΄ν° μ 곡
μλ λ μ±λ΄μμ μ¬μ©νλ μκ°ν νμ± κΈ°λ₯μ λΌμ΄λΈλ¬λ¦¬λ‘ κ°λ°νμμ΅λλ€.
- κ΄λͺ κ²½μνκ³κ³ λ±νκ΅ μΉ΄μΉ΄μ€ μλμλ΅ API μ±λ΄
- κ΄λͺ κ²½μνκ³κ³ λ±νκ΅ μΉ΄μΉ΄μ€ μ€νλΉλ i μ±λ΄
μ»΄μκ° μλΉμ€λ₯Ό μ¬μ©νλ νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό μ½κ² μμ§νμ¬ μ¬μ©ν μ μμ΅λλ€.
μ»΄μκ°μΈ‘μ μμ€μ½λ λ³κ²½μΌλ‘ μΈν΄ μκ°ν λ°μ΄ν° νμ±μ΄ λΆκ°λ₯ ν μ μμ΅λλ€. λ¬Έμ κ° λ°μν κ²½μ° μ¬κΈ°λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ
(μ£Όμ!) λ³Έ λΌμ΄λΈλ¬λ¦¬λ λΉκ³΅μμ μΌλ‘ μ»΄μκ° μλΉμ€μ λ°μ΄ν°λ₯Ό νμ±νλ©°, μμ μ μΈ μ©λλ‘ μ¬μ©νλ€ λ¬Έμ κ° λ°μν κ²½μ° λ³Έ λΌμ΄λΈλ¬λ¦¬ κ°λ°μλ μ± μμ μ§μ§ μμ΅λλ€.
npm i comcigan-parser
Timetable ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ μ¬μ©ν©λλ€.
λͺ¨λμ λΆλ¬μ€λ©΄ Timetable ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
const Timetable = require('comcigan-parser');
const timetable = new Timetable();
μΈμ€ν΄μ€ μ 보λ₯Ό μ΄κΈ°ν ν©λλ€.
μ΅μ
μ μΆκ°νμ¬ μ¬μ©μ μ€μ μ μ§νν μ μμ΅λλ€.
timetable.init(options);
Parameter | Type | Required |
---|---|---|
option | object | X |
μ΅μ μ 보λ μλ ν μ°Έκ³
Option | Value | default | Required |
---|---|---|---|
maxGrade | number | 3 | X |
cache | number | 0 | X |
maxGrade
: μ΅λ νλ μ μ§μ ν©λλ€. (μ΄λ±: 6, μ€/κ³ λ±: 3)cache
: μκ°ν λ°μ΄ν° μΊμ± μκ°(ms)μ μ§μ ν©λλ€ (κΈ°λ³Έκ°: 0 - λΉνμ±)- μκ°μ μ§μ νλ©΄, λ°μ΄ν° μ‘°ν μ μ§μ ν μκ°λ§νΌ μμλ‘ λ³΄κ΄νκ³ μλ€κ°, μ΄ν μλ‘μ΄ μ‘°νν λ 보κ΄νλ κ²°κ³Ό λ°μ΄ν°λ₯Ό μ¦μ λ°νν©λλ€.
- μ§μ ν μΊμ± μκ°μ΄ μ§λλ©΄ μλ‘ μμ§νλ©°, λ€μ μΊμ± μκ°λ§νΌ 보κ΄ν©λλ€.
Return - Promise<void>
νκ΅ μ 보λ₯Ό κ²μν©λλ€.
μ»΄μκ°μ λ±λ‘λ νκ΅κ° μλ κ²½μ° κ²μλμ§ μμ΅λλ€.
timetable.search(keyword);
Parameter | Type | Required |
---|---|---|
keyword | string | O |
Return - Promise<νκ΅λ°μ΄ν°[]>
νκ΅ λ°μ΄ν°λ μ¬κΈ° μ°Έκ³
μκ°νλ₯Ό λΆλ¬μ¬ νκ΅λ₯Ό μ§μ ν©λλ€. νκ΅ μ½λλ νκ΅ κ²μμ ν΅ν΄ νμΈν μ μμ΅λλ€.
timetable.setSchool(schoolCode);
Parameter | Type | Required |
---|---|---|
keyword | number | O |
Return - void
μ§μ ν νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό λΆλ¬μ΅λλ€.
timetable.getTimetable();
Return - Promise<μκ°ν>
κ° κ΅μλ³ μμ μμ/μ’ λ£ μκ°μ 보λ₯Ό λ°νν©λλ€.
timetable.getClassTime();
Return - string[]
comcigan-parser
λͺ¨λμ λΆλ¬μ¨ ν μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
μμ± ν λ°λμ init(option)
λ₯Ό νΈμΆνμ¬ μ΄κΈ°ν ν©λλ€.
- μ΅μ μ μ¬κΈ° μ°Έμ‘°
const Timetable = require('comcigan-parser');
const timetable = new Timetable();
timetable.init().then(() => {
// μ΄κΈ°ν μλ£..
});
μ»΄μκ°μ λ±λ‘λμ΄μλ νκ΅λ₯Ό κ²μνμ¬ κ²°κ³Όλ₯Ό λ°νν©λλ€.
κ²μ κ²°κ³Όκ° μλ κ²½μ° μμΈκ° λ°μν©λλ€.
timetable.search('κ΄λͺ
').then((schoolList) => {
// schoolList
// [
// { _: 24966, region: 'κ²½κΈ°', name: 'κ΄λͺ
λΆμ€νκ΅', code: 74350 },
// { _: 24966, region: 'κ²½κΈ°', name: 'κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅', code: 13209 },
// { _: 24966, region: 'κ²½κΈ°', name: 'κ΄λͺ
λΆκ³ λ±νκ΅', code: 36854 },
// { _: 24966, region: 'κ²½κΈ°', name: 'κ΄λͺ
κ³ λ±νκ΅', code: 31443 },
// { _: 24966, region: 'κ²½κΈ°', name: 'κ΄λͺ
μ€νκ΅', code: 31098 }
// ]
});
μ»΄μκ°μ λ±λ‘λμ΄μλ νκ΅λ₯Ό κ²μνκ³ μΈμ€ν΄μ€μ λ±λ‘ν©λλ€.
νκ΅κ° μ¬λ¬κ° μ‘°νλκ±°λ κ²μ κ²°κ³Όκ° μλ κ²½μ° μμΈκ° λ°μν©λλ€.
const mySchool = schoolList.find((school) => {
return school.region === 'κ²½κΈ°' && school.name === 'κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅';
});
timetable.setSchool(mySchool.code);
λ±λ‘ν νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό μ‘°νν©λλ€.
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();
const Timetable = require('comcigan-parser');
const timetable = new Timetable();
const schoolFinder = (schoolName, region) => (schoolList) => {
const targetSchool = schoolList.find((school) => {
return school.region === region && school.name.includes(schoolName);
});
return targetSchool;
};
timetable
.init({ cache: 1000 * 60 * 60 }) // μΊμ 1μκ°λμ 보κ΄
.then(() => timetable.search('κ΄λͺ
'))
.then(schoolFinder('κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅', 'κ²½κΈ°'))
.then((school) => timetable.setSchool(school.code))
.then(() => {
Promise.all([timetable.getClassTime(), timetable.getTimetable()]).then((res) => {
console.log(res[0]); // μκ°ν
console.log(res[1]); // μμ
μκ°μ 보
});
});
const Timetable = require('comcigan-parser');
const timetable = new Timetable();
const test = async () => {
await timetable.init();
const school = await timetable.search('κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅');
timetable.setSchool(school[0].code);
// μ κ΅ μκ°ν μ 보 μ‘°ν
const result = await timetable.getTimetable();
console.log(result);
// κ° κ΅μλ³ μμ
μμ/μ’
λ£ μκ° μ 보 μ‘°ν
const time = await timetable.getClassTime();
console.log(time);
};
{
_: 24966, // μ μ μλ μ½λ
region:'κ²½κΈ°', // μ§μ
name: 'κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅', // νκ΅λͺ
code: 13209 // νκ΅μ½λ
}
{
"1": {
// 1νλ
"1": [ // 1λ°
[ // μμμΌ μκ°ν
{
grade: 1, // νλ
class: 1, // λ°
weekday: 1, // μμΌ (1: μ ~ 5: κΈ)
weekdayString: 'μ', // μμΌ λ¬Έμμ΄
classTime: 1, // κ΅μ
teacher: 'μ΄ν¬*', // μ μλ μ±ν¨
subject: 'μ€μ©λΉμ¦λμ€μμ΄' // κ³Όλͺ©λͺ
},
{
grade: 1,
class: 1,
weekday: 1,
weekdayString: 'μ',
classTime: 2,
code: '1606',
teacher: 'κ°μ°*',
subject: 'μ§λ‘νλ'
}
],
[νμμΌμκ°ν],
[μμμΌμκ°ν],
[λͺ©μμΌμκ°ν],
[κΈμμΌμκ°ν]
],
"2": [ // 2λ°
[μμμΌμκ°ν],
[νμμΌμκ°ν],
[μμμΌμκ°ν],
[λͺ©μμΌμκ°ν],
[κΈμμΌμκ°ν]
],
"3": [
[], [], [], [], []
],
...
},
"2": {
// 2νλ
},
"3": {
// 3νλ
}
}
κ° μκ°ν λ°μ΄ν° νμ
- κ° μμΌ
Array
μλ μλμ κ°μ νμμ λ°μ΄ν°κ° ν¬ν¨λμ΄μμ
[
{
grade: 3, // νλ
class: 10, // λ°
weekday: 1, // μμΌ (1: μ ~ 5: κΈ)
weekdayString: 'μ', // μμΌ λ¬Έμμ΄
classTime: 1, // κ΅μ
code: '5644', // μμ
μ½λ
teacher: 'μ΄ν¬*', // μ μλ μ±ν¨
subject: 'μ€μ©λΉμ¦λμ€μμ΄' // κ³Όλͺ©λͺ
},
{
grade: 3,
class: 10,
weekday: 1,
weekdayString: 'μ',
classTime: 2,
teacher: 'κ°μ°*',
subject: 'μ§λ‘νλ'
},
...
]
['1(09:10)', '2(10:10)', '3(11:10)', '4(12:10)', '5(13:50)', '6(14:50)', '7(15:50)', '8(16:50)'];
μμ© λ°©λ²
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νλ 3λ°(result[1][3]), 3νλ 9λ°(result[3][9])
- μμΌ, κ΅μμ κ²½μ° μΈλ±μ€λ 0λΆν° μμνλ―λ‘ -1 κ°μ ν΅ν΄ μ κ·Ό
- μ: μμμΌ 3κ΅μ(result[..][..][0][2])
μκ°ν νμ±μ΄ λμ§ μκ±°λ λ¬Έμ κ° λ°μν κ²½μ° μ΄μλ₯Ό λ¨κ²¨μ£ΌμΈμ.
1.0.0
- νκ΅ κ²μκ³Ό μ€μ κΈ°λ₯μ λΆλ¦¬
- νκ΅ μ€μ λ°©μ λ³κ²½ (μμΈν μ¬νμ μ¬κΈ° μ°Έμ‘°)
- νκ΅ κ²μ κΈ°λ₯μ μννλ
search
λ©μλ μΆκ° - κ²μ κΈ°λ₯ λΆλ¦¬μ λ°λ₯Έ
setSchool
λ©μλ μμ - λμΌν μ΄λ¦μ νκ΅κ° μ‘°νλμμ λ μμΈλ₯Ό λ°μμν€λ λ‘μ§ μ κ±° (#12)
0.3.0
- μ»΄μκ° λ³κ²½μ¬ν λμ (λλ©μΈ λ³κ²½)
- λ μνν λ°μ΄ν° μμ§μ μν΄ μ½μ΄ λ‘μ§ μμ
getClassTime()
μ¬μ©λ² λ³κ²½ - μ΄μ νλΌλ―Έμ€λ₯Ό λ°νν©λλ€firstNames
μ΅μ μ κ±°cache
μ΅μ μΆκ°- μκ°ν λ°μ΄ν°μ μμ±λͺ
λ³κ²½ (μ :
class_time
, ν:classTime
) - μκ°ν λ°μ΄ν°μ
code
κ° μ κ±°
0.2.0
- getClassTime λ©μλ μΆκ° (κ° κ΅μλ³ μμ μμ/μ’ λ£ μκ° μ 보) - μ°Έμ‘°
0.1.1
- tempSave μ΅μ λ¬Έμ μμ
0.1.0
- tempSave μ΅μ μμ
- μκ°ν μΆμΆ λ°μ΄ν° μκ³κ° μ΅μ μΆκ° (μμΈν μ¬νμ μ¬κΈ° μ°Έμ‘°)
0.0.3
- λ°μ΄ν° νμ± λ¬Έμ μμ
0.0.2
- κ°λ° λ¬Έμ μΆκ°
init
μ κΈ°λ³Έ μ΅μ λ¬Έμ μμ
0.0.1
- 첫 λ²μ§Έ 릴리μ¦!