https://github.com/leegeunhyeok/comcigan-parser
ππ μ»΄μκ° μ리미 μκ°ν νμ± λΌμ΄λΈλ¬λ¦¬ μ
λλ€.
https://github.com/leegeunhyeok/comcigan-parser
Last synced: 21 days ago
JSON representation
ππ μ»΄μκ° μ리미 μκ°ν νμ± λΌμ΄λΈλ¬λ¦¬ μ λλ€.
- Host: GitHub
- URL: https://github.com/leegeunhyeok/comcigan-parser
- Owner: leegeunhyeok
- License: mit
- Created: 2018-12-26T08:37:44.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-03-05T19:18:55.000Z (about 1 year ago)
- Last Synced: 2025-03-25T08:01:59.667Z (about 1 month ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/comcigan-parser
- Size: 272 KB
- Stars: 35
- Watchers: 2
- Forks: 11
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# comcigan-parser
ππ λ³Έ λΌμ΄λΈλ¬λ¦¬λ `Node.js` νκ²½μμ μ¬μ©ν μ μλ μ»΄μκ° μ리미 μκ°ν νμ± λΌμ΄λΈλ¬λ¦¬ μ λλ€.
λ³Έ λΌμ΄λΈλ¬λ¦¬λ [μ»΄μκ°](http://μ»΄μκ°νμ.kr) ννμ΄μ§μμ λ±λ‘λ νκ΅μ **μκ°ν** λ°μ΄ν°λ₯Ό νμ±νμ¬ μ 곡ν©λλ€.[](https://github.com/leegeunhyeok/comcigan-parser/actions?query=workflow%3A"health")
[](https://www.npmjs.com/package/comcigan-parser)
[](https://www.npmjs.com/package/comcigan-parser)
[](LICENSE)λ§€μ£Ό μμμΌ 09μμ λ³Έ λΌμ΄λΈλ¬λ¦¬ λμ μ¬λΆλ₯Ό νμΈν©λλ€. μ healthμ μνκ° `passing`μ΄ μλλΌλ©΄ μ»΄μκ° μ¬μ΄νΈ λ³κ²½, μμ€μ½λ λ³κ²½ λ±μ λ¬Έμ κ° λ°μνλ€λ μλ―Έμ΄λ μ΄μ μ λ¬ λΆνλ립λλ€.
## κΈ°λ₯
- νκ΅λͺ μ λ ₯ ν λ°λ‘ μ¬μ© κ°λ₯
- νκΈ μκ°ν λ°μ΄ν° μ 곡## μ 보
> μλ λ μ±λ΄μμ μ¬μ©νλ μκ°ν νμ± κΈ°λ₯μ λΌμ΄λΈλ¬λ¦¬λ‘ κ°λ°νμμ΅λλ€.
- [κ΄λͺ κ²½μνκ³κ³ λ±νκ΅ μΉ΄μΉ΄μ€ μλμλ΅ API μ±λ΄](https://github.com/leegeunhyeok/GMMAHS-KAKAO)
- [κ΄λͺ κ²½μνκ³κ³ λ±νκ΅ μΉ΄μΉ΄μ€ μ€νλΉλ i μ±λ΄](https://github.com/leegeunhyeok/GMMAHS-KAKAO-i)## μ€μΉνκΈ°
μ»΄μκ° μλΉμ€λ₯Ό μ¬μ©νλ νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό μ½κ² μμ§νμ¬ μ¬μ©ν μ μμ΅λλ€.
μ»΄μκ°μΈ‘μ μμ€μ½λ λ³κ²½μΌλ‘ μΈν΄ μκ°ν λ°μ΄ν° νμ±μ΄ λΆκ°λ₯ ν μ μμ΅λλ€.
λ¬Έμ κ° λ°μν κ²½μ° [μ¬κΈ°](#λ¬Έμ -μ κ³ )λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ> (μ£Όμ!) λ³Έ λΌμ΄λΈλ¬λ¦¬λ λΉκ³΅μμ μΌλ‘ μ»΄μκ° μλΉμ€μ λ°μ΄ν°λ₯Ό νμ±νλ©°, μμ μ μΈ μ©λλ‘ μ¬μ©νλ€ λ¬Έμ κ° λ°μν κ²½μ° λ³Έ λΌμ΄λΈλ¬λ¦¬ κ°λ°μλ μ± μμ μ§μ§ μμ΅λλ€.
```bash
npm i comcigan-parser
```## κ°λ° λ¬Έμ
### Timetable
Timetable ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ μ¬μ©ν©λλ€.
λͺ¨λμ λΆλ¬μ€λ©΄ Timetable ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
```javascript
const Timetable = require('comcigan-parser');
const timetable = new Timetable();
```---
### Timetable.init()
μΈμ€ν΄μ€ μ 보λ₯Ό μ΄κΈ°ν ν©λλ€.
μ΅μ μ μΆκ°νμ¬ μ¬μ©μ μ€μ μ μ§νν μ μμ΅λλ€.```javascript
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`
---
### Timetable.search()
νκ΅ μ 보λ₯Ό κ²μν©λλ€.
> μ»΄μκ°μ λ±λ‘λ νκ΅κ° μλ κ²½μ° κ²μλμ§ μμ΅λλ€.
```javascript
timetable.search(keyword);
```| Parameter | Type | Required |
| :-------- | :----: | :------: |
| keyword | string | O |Return - `Promise<νκ΅λ°μ΄ν°[]>`
νκ΅ λ°μ΄ν°λ [μ¬κΈ°](#νκ΅-λ°μ΄ν°) μ°Έκ³
---
### Timetable.setSchool()
μκ°νλ₯Ό λΆλ¬μ¬ νκ΅λ₯Ό μ§μ ν©λλ€. νκ΅ μ½λλ νκ΅ κ²μμ ν΅ν΄ νμΈν μ μμ΅λλ€.
```javascript
timetable.setSchool(schoolCode);
```| Parameter | Type | Required |
| :-------- | :----: | :------: |
| keyword | number | O |Return - `void`
---
### Timetable.getTimetable()
μ§μ ν νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό λΆλ¬μ΅λλ€.
```javascript
timetable.getTimetable();
```Return - `Promise<μκ°ν>`
---
### Timetable.getClassTime()
κ° κ΅μλ³ μμ μμ/μ’ λ£ μκ°μ 보λ₯Ό λ°νν©λλ€.
```javascript
timetable.getClassTime();
```Return - `string[]`
---
## μ¬μ© λ°©λ²
### Timetable μΈμ€ν΄μ€ μμ±
`comcigan-parser` λͺ¨λμ λΆλ¬μ¨ ν μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
μμ± ν λ°λμ `init(option)`λ₯Ό νΈμΆνμ¬ μ΄κΈ°ν ν©λλ€.- μ΅μ μ [μ¬κΈ°](#timetableinit) μ°Έμ‘°
```javascript
const Timetable = require('comcigan-parser');
const timetable = new Timetable();timetable.init().then(() => {
// μ΄κΈ°ν μλ£..
});
```---
### νκ΅ κ²μ
μ»΄μκ°μ λ±λ‘λμ΄μλ νκ΅λ₯Ό κ²μνμ¬ κ²°κ³Όλ₯Ό λ°νν©λλ€.
> κ²μ κ²°κ³Όκ° μλ κ²½μ° μμΈκ° λ°μν©λλ€.
```javascript
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 }
// ]
});
```---
### νκ΅ μ€μ
μ»΄μκ°μ λ±λ‘λμ΄μλ νκ΅λ₯Ό κ²μνκ³ μΈμ€ν΄μ€μ λ±λ‘ν©λλ€.
> νκ΅κ° μ¬λ¬κ° μ‘°νλκ±°λ κ²μ κ²°κ³Όκ° μλ κ²½μ° μμΈκ° λ°μν©λλ€.
```javascript
const mySchool = schoolList.find((school) => {
return school.region === 'κ²½κΈ°' && school.name === 'κ΄λͺ κ²½μνκ³κ³ λ±νκ΅';
});timetable.setSchool(mySchool.code);
```---
### μκ°ν μ‘°ν
λ±λ‘ν νκ΅μ μκ°ν λ°μ΄ν°λ₯Ό μ‘°νν©λλ€.
```javascript
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]);
});
```---
### μμ μκ° μ 보 μ‘°ν
μμ μκ° μ 보λ₯Ό λ°ννλλ€.
```javascript
timetable.getClassTime();
```---
## νμ© μμ
```javascript
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]); // μμ μκ°μ 보
});
});
``````javascript
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);
};
```## λ°μ΄ν° νμ
### νκ΅ λ°μ΄ν°
```javascript
{
_: 24966, // μ μ μλ μ½λ
region:'κ²½κΈ°', // μ§μ
name: 'κ΄λͺ κ²½μνκ³κ³ λ±νκ΅', // νκ΅λͺ
code: 13209 // νκ΅μ½λ
}
```### μκ°ν λ°μ΄ν°
```javascript
{
"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` μλ μλμ κ°μ νμμ λ°μ΄ν°κ° ν¬ν¨λμ΄μμ
```javascript
[
{
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: 'μ§λ‘νλ'
},
...
]
```### μμ μκ° μ 보
```javascript
['1(09:10)', '2(10:10)', '3(11:10)', '4(12:10)', '5(13:50)', '6(14:50)', '7(15:50)', '8(16:50)'];
```μμ© λ°©λ²
```javascript
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])## λ¬Έμ μ κ³
μκ°ν νμ±μ΄ λμ§ μκ±°λ λ¬Έμ κ° λ°μν κ²½μ° [μ΄μ](https://github.com/leegeunhyeok/comcigan-parser/issues)λ₯Ό λ¨κ²¨μ£ΌμΈμ.
## λ³κ²½μ¬ν
- `1.0.0`
- νκ΅ κ²μκ³Ό μ€μ κΈ°λ₯μ λΆλ¦¬
- νκ΅ μ€μ λ°©μ λ³κ²½ (μμΈν μ¬νμ [μ¬κΈ°](#νκ΅-μ€μ ) μ°Έμ‘°)
- νκ΅ κ²μ κΈ°λ₯μ μννλ `search` λ©μλ μΆκ°
- κ²μ κΈ°λ₯ λΆλ¦¬μ λ°λ₯Έ `setSchool` λ©μλ μμ
- λμΌν μ΄λ¦μ νκ΅κ° μ‘°νλμμ λ μμΈλ₯Ό λ°μμν€λ λ‘μ§ μ κ±° ([#12](https://github.com/leegeunhyeok/comcigan-parser/issues/12))
- `0.3.0`
- μ»΄μκ° λ³κ²½μ¬ν λμ (λλ©μΈ λ³κ²½)
- λ μνν λ°μ΄ν° μμ§μ μν΄ μ½μ΄ λ‘μ§ μμ
- `getClassTime()` μ¬μ©λ² λ³κ²½ - μ΄μ νλΌλ―Έμ€λ₯Ό λ°νν©λλ€
- `firstNames` μ΅μ μ κ±°
- `cache` μ΅μ μΆκ°
- μκ°ν λ°μ΄ν°μ μμ±λͺ λ³κ²½ (μ : `class_time`, ν: `classTime`)
- μκ°ν λ°μ΄ν°μ `code` κ° μ κ±°
- `0.2.0`
- getClassTime λ©μλ μΆκ° (κ° κ΅μλ³ μμ μμ/μ’ λ£ μκ° μ 보) - [μ°Έμ‘°](#timetablegetclasstime)
- `0.1.1`
- tempSave μ΅μ λ¬Έμ μμ
- `0.1.0`
- tempSave μ΅μ μμ
- μκ°ν μΆμΆ λ°μ΄ν° μκ³κ° μ΅μ μΆκ° (μμΈν μ¬νμ [μ¬κΈ°](#timetableinit) μ°Έμ‘°)
- `0.0.3`
- λ°μ΄ν° νμ± λ¬Έμ μμ
- `0.0.2`
- κ°λ° λ¬Έμ μΆκ°
- `init`μ κΈ°λ³Έ μ΅μ λ¬Έμ μμ
- `0.0.1` - 첫 λ²μ§Έ 릴리μ¦!