μ κ΅ μ΄, λ±, κ³ λ±νκ΅ λ° λ³μ€μ μΉμ κΈμ, νμ¬μΌμ νμ± λΌμ΄λΈλ¬λ¦¬
λ³Έ λΌμ΄λΈλ¬λ¦¬λ Node.js
νκ²½μμ μ¬μ©ν μ μλ Promise κΈ°λ°μ κΈμ API
+ νμ¬μΌμ API
ν΅ν© λΌμ΄λΈλ¬λ¦¬ μ
λλ€.
μ κ΅ κ΅μ‘μ² νμ μλΉμ€ νμ΄μ§(stu.xxx.go.kr)λ₯Ό νμ±νμ¬ μ΄λ² λ¬ νμ¬μΌμ κ³Ό κΈμ μ 보λ₯Ό JSON λ°μ΄ν°λ‘ μ 곡ν©λλ€.
3.0.0
λ²μ λΆν° νμ± λ°©μμ΄ μλ API νΈμΆμ ν΅ν΄ λ°μ΄ν°λ₯Ό μμ§νμ¬ μ 곡ν©λλ€.
μκ°ν μ 보
λ νμνμ κ°μ? κ·Έλ λ€λ©΄ comcigan-parser λΌμ΄λΈλ¬λ¦¬λ ν¨κ» νμΈν΄λ³΄μΈμ!
NPM μ μ₯μλ₯Ό ν΅ν΄ λ€μ΄λ‘λ λ°μ μ μμΌλ©° λ³λ€λ₯Έ μμ μμ΄ λ°λ‘ μ¬μ© κ°λ₯ν©λλ€.
npm i school-kr
μλ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νμ¬ λ―Έλ¦¬ μμ±λ μμ μ½λλ₯Ό μ€νν΄λ³Ό μ μμ΅λλ€.
sample/sample.js
μ½λκ° μ€νλλ©°, νκ΅λ κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅
κΈ°μ€μΌλ‘ μ€νλ©λλ€.
npm test
v2
λ²μ κ³Ό v3
λ²μ μ μ±λ₯ λΉκ΅
v3λ v2 λλΉ μ½ 25%μ μ±λ₯μ΄ ν₯μλ¨ (λ€νΈμν¬ μνμ λ°λΌ μΌλΆ λ³λλ μ μμ)
ν
μ€νΈ μ½λλ test/test_v2.js
, test/test_v3.js
μ°Έκ³
λͺ¨λμ λΆλ¬μ€λ©΄ School ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
const School = require('school-kr');
new School();
νκ΅ μ’ λ₯ μ°Έμ‘°
κ΅μ‘μ² κ΄ν μ§μ μ°Έμ‘°
μ§μ ν μ§μμ νκ΅λ₯Ό κ²μνμ¬ μ 보λ₯Ό λ°νν©λλ€.
Parameter | Type | Required |
---|---|---|
region | Symbol | O |
name | string | O |
Return type: Promise<Array<any>>
, μ°Έκ³
const school = new School();
school.search(region, name);
μμ λ νκ΅ κ²μ μ°Έμ‘°
μΈμ€ν΄μ€ μ 보λ₯Ό μ§μ ν νκ΅λ‘ μ΄κΈ°ν ν©λλ€.
Parameter | Type | Required |
---|---|---|
type | Symbol | O |
region | Symbol | O |
schoolCode | string | O |
Return type: void
const school = new School();
school.init(type, region, schoolCode);
μμ λ μΈμ€ν΄μ€ μ΄κΈ°ν μ°Έμ‘°
μ΄λ² λ¬ λλ μ§μ ν λ
λ/μμ κΈμ λ°μ΄ν°λ₯Ό λ°νν©λλ€
λ
λ λλ μμ μ§μ νμ§ μμ κ²½μ° νμ¬ μμ μ λ μ§ κΈ°μ€μ λ°μ΄ν°λ₯Ό λ°νν©λλ€.
Parameter | Type | Required |
---|---|---|
year | any | X |
month | number | X |
Return type: Promise<any>
, μ°Έκ³
school.getMeal(year, month);
μμ λ κΈμ λ° νμ¬μΌμ μ‘°ν μ°Έμ‘°
μ΄λ² λ¬ λλ μ§μ ν λ
λ/μμ νμ¬μΌμ λ°μ΄ν°λ₯Ό λ°νν©λλ€
λ
λ λλ μμ μ§μ νμ§ μμ κ²½μ° νμ¬ μμ μ λ μ§ κΈ°μ€μ λ°μ΄ν°λ₯Ό λ°νν©λλ€.
Parameter | Type | Required |
---|---|---|
year | any | X |
month | number | X |
Return type: Promise<any>
, μ°Έκ³
school.getCalendar(year, month);
μμ λ κΈμ λ° νμ¬μΌμ μ‘°ν μ°Έμ‘°
school-kr
λͺ¨λμ λΆλ¬μ¨ ν μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
μμ± ν λ°λμ init()
λ₯Ό νΈμΆνμ¬ λ°μ΄ν°λ₯Ό μ‘°νν νκ΅λ‘ μ΄κΈ°νν©λλ€.
- init() νΈμΆ μμ΄ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ κ²½μ° Errorκ° Throw λ©λλ€.
const School = require('school-kr')
const school = new School()
/*
* @param type: νκ΅ μ ν(μ΄, μ€, κ³ , λ³μ€μ μΉμ)
* @param region: κ΅μ‘μ² κ΄ν μ§μ
* @param schoolCode: νκ΅ κ³ μ μ½λ
*/
school.init(/* Type */, /* Region */, /* SchoolCode */)
νκ΅ μ’
λ₯λ School.Type
μμ μ νν μ μμ΅λλ€.
const School = require('school-kr');
/* 4 */
console.log(School.Type.HIGH);
μ ν | Key | Value |
---|---|---|
λ³μ€μ μΉμ | KINDERGARTEN |
1 |
μ΄λ±νκ΅ | ELEMENTARY |
2 |
μ€νκ΅ | MIDDLE |
3 |
κ³ λ±νκ΅ | HIGH |
4 |
μ§μμ μμ±ν School.Region
μμ μ νν μ μμ΅λλ€.
const School = require('school-kr');
/* stu.sen.go.kr */
console.log(School.Region.SEOUL);
μ§μ | Key | Value |
---|---|---|
μμΈ | SEOUL |
stu.sen.go.kr |
μΈμ² | INCHEON |
stu.ice.go.kr |
λΆμ° | BUSAN |
stu.pen.go.kr |
κ΄μ£Ό | GWANGJU |
stu.gen.go.kr |
λμ | DAEJEON |
stu.dge.go.kr |
λꡬ | DEAGU |
stu.dge.go.kr |
μΈμ’ | SEJONG |
stu.sje.go.kr |
μΈμ° | ULSAN |
stu.use.go.kr |
κ²½κΈ° | GYEONGGI |
stu.goe.go.kr |
κ°μ | KANGWON |
stu.kwe.go.kr |
μΆ©λΆ | CHUNGBUK |
stu.cbe.go.kr |
μΆ©λ¨ | CHUNGNAM |
stu.cne.go.kr |
κ²½λΆ | GYEONGBUK |
stu.gbe.go.kr |
κ²½λ¨ | GYEONGNAM |
stu.gne.go.kr |
μ λΆ | JEONBUK |
stu.jbe.go.kr |
μ λ¨ | JEONNAM |
stu.jne.go.kr |
μ μ£Ό | JEJU |
stu.jje.go.kr |
School.search()
λ₯Ό ν΅ν΄ νκ΅ μ½λλ₯Ό κ²μν μ μμ΅λλ€.
μμΈν μ¬μ©λ²μ νκ΅ κ²μ μ°Έμ‘°
β» μλ μμ λ κ²½κΈ°λμ κ΄λͺ
κ²½μνκ³κ³ λ±νκ΅
λ₯Ό κΈ°μ€μΌλ‘ μ§νλ©λλ€.
const School = require('school-kr');
const school = new School();
school.search(School.Region.GYEONGGI, 'κ΄λͺ
κ²½μνκ³κ³ ');
const School = require('school-kr');
const school = new School();
school.init(School.Type.HIGH, School.Region.GYEONGGI, 'J100000488');
const School = require('school-kr');
const school = new School();
const example = async function () {
// νκ΅ κ²μ λ° μ²« λ²μ§Έ κ²°κ³Όμ νκ΅ μ½λλ‘ μ΄κΈ°ν
const result = await school.search(School.Region.GYEONGGI, 'κ΄λͺ
κ²½μνκ³κ³ ');
school.init(School.Type.HIGH, School.Region.GYEONGGI, result[0].schoolCode);
const meal = await school.getMeal();
const calendar = await school.getCalendar();
// μ€λ λ μ§
console.log(`${meal.month}μ ${meal.day}μΌ`);
// μ€λ κΈμ μ 보
console.log(meal.today);
// μ΄λ² λ¬ κΈμ μ 보
console.log(meal);
// μ΄λ² λ¬ νμ¬μΌμ
console.log(calendar);
// λ
λμ λ¬μ μ§μ νμ¬ ν΄λΉ λ μ§μ λ°μ΄ν°λ₯Ό μ‘°νν μ μμ΅λλ€.
const mealCustom = await school.getMeal(2018, 9);
const calendarCustom = await school.getCalendar(2017, 4);
console.log(mealCustom);
console.log(calendarCustom);
// λ
λκ° λμ μ΅μ
κ°μ²΄λ₯Ό μ λ¬νμ¬ λ°μ΄ν° μμ§ κ°λ₯
// year: λ
λ (κΈ°λ³Έκ°: νμ¬ μμ μ λ
λ)
// month: λ¬ (κΈ°λ³Έκ°: νμ¬ μμ μ λ¬)
// default: κΈμμ΄ μλ κ²½μ° κΈ°λ³Έκ° (κΈ°λ³Έκ°: '')
const optionMeal = await school.getMeal({
year: 2018,
month: 9,
default: 'κΈμμ΄ μμ΅λλ€',
});
// λ
λκ° λμ μ΅μ
κ°μ²΄λ₯Ό μ λ¬νμ¬ λ°μ΄ν° μμ§ κ°λ₯
// year: λ
λ (κΈ°λ³Έκ°: νμ¬ μμ μ λ
λ)
// month: λ¬ (κΈ°λ³Έκ°: νμ¬ μμ μ λ¬)
// default: κΈμμ΄ μλ κ²½μ° κΈ°λ³Έκ° (κΈ°λ³Έκ°: '')
// separator: ν루μ 2κ° μ΄μμ μΌμ μ΄ μλ κ²½μ°μ ꡬλΆλ¬Έμ (κΈ°λ³Έκ°: ,)
// μ: 겨μΈλ°©ν,ν μν΄μ
μΌ
const optionCalendar = await school.getCalendar({
default: 'μΌμ μλ λ ',
separator: '\n',
});
console.log(optionMeal);
console.log(optionCalendar);
};
example();
search
λ°ν λ°μ΄ν° νμμ μλμ κ°μ΅λλ€.
Key | Value | λΉκ³ |
---|---|---|
name | νκ΅λͺ | |
schoolCode | νκ΅ μ½λ | NEIS μ½λ |
address | νκ΅ μμ¬μ§ |
// κ²½κΈ°, μν ν€μλ κ²μ κ²°κ³Ό
[
{
name: 'μνμ΄λ±νκ΅λ³μ€μ μΉμ',
schoolCode: 'J100005055',
address: 'κ²½κΈ°λ κ΄λͺ
μ μν1λ',
},
{
name: 'μνμ΄λ±νκ΅',
schoolCode: 'J100001213',
address: 'κ²½κΈ°λ κ΄λͺ
μ μνλ',
},
{ name: 'μνμ€νκ΅', schoolCode: 'J100001194', address: 'κ²½κΈ°λ κ΄λͺ
μ μνλ' },
{
name: 'μνκ³ λ±νκ΅',
schoolCode: 'J100000632',
address: 'κ²½κΈ°λ κ΄λͺ
μ μν1λ',
},
];
getMeal
λ°ν λ°μ΄ν° νμμ μλμ κ°μ΅λλ€.
Key | Value | λΉκ³ |
---|---|---|
1 ~ 31 | ν΄λΉ λ μ§μ κΈμ | κΈμμ΄ μλ κ²½μ° option.default κ° νΉμ λΉ λ¬Έμμ΄ |
year | μ‘°ν λ λ | |
month | μ‘°ν λ¬ | |
day | μ€λ λ μ§ | μ¬μ©μ μ§μ λ λ/μμ΄ μ΄λ² λ¬μ΄ μλ κ²½μ° 0 |
today | μ€λ κΈμ | κΈμμ΄ μλ κ²½μ° κΈ°λ³Έ κΈμ κ° |
{
'1': '[μ€μ]\nλ°μνλ―Έλ°₯\nλ―Έμκ΅5.6.9....', // μ΄λ²λ¬ 1μΌ λ©λ΄
'2': '[μ€μ]\nμΌκ°μ΄λμ₯무침5.6.\nμΉΌμμ°Ήμ....', // μ΄λ²λ¬ 2μΌ λ©λ΄
'3': '[μ€μ]\nν¬μλ°νμ€ν(μ£Όμ)1.2.5.6.9.13.15.\n....', // μ΄λ²λ¬ 3μΌ λ©λ΄
'4': '', // κΈμμ΄ μμ κ²½μ° option.default κ° νΉμ λΉ λ¬Έμμ΄
'5': '',
...
'year': 2018, // μ΄λ² λ
λ
'month': 5, // μ΄λ² λ¬
'day': 3, // μ€λ λ μ§
'today': '[μ€μ]\nν¬μλ°νμ€ν(μ£Όμ)1.2.5.6.9.13.15.\n....' // μ€λ λ©λ΄
}
getCalendar
λ°ν λ°μ΄ν° νμμ μλμ κ°μ΅λλ€.
Key | Value | λΉκ³ |
---|---|---|
1 ~ 31 | ν΄λΉ λ μ§μ μΌμ | μΌμ μ΄ μλ κ²½μ° option.default κ° νΉμ λΉ λ¬Έμμ΄ |
year | μ‘°ν λ λ | |
month | μ‘°ν λ¬ | |
day | μ€λ λ μ§ | μ¬μ©μ μ§μ λ λ/μμ΄ μ΄λ² λ¬μ΄ μλ κ²½μ° 0 |
today | μ€λ κΈμ | μΌμ μ΄ μλ κ²½μ° κΈ°λ³Έ μΌμ κ° |
{
'1': '', // μ΄λ² λ¬ 1μΌμ μΌμ
'2': '', // μΌμ μ΄ μμ κ²½μ° option.default κ° νΉμ λΉ λ¬Έμμ΄
'3': '',
'4': 'κ°κ΅κΈ°λ
μΌ', // 4μΌ μΌμ
'5': '',
'6': '',
'7': 'λ체곡ν΄μΌ',
...
'year': 2018,
'month': 5 // μ΄λ² λ¬
'day': 4, // μ€λ λ μ§
'today': 'κ°κ΅κΈ°λ
μΌ' // μ€λμ μΌμ
}
v3 λ―Έλ§μ λ²μ μ μ¬μ©νμλ κ²½μ° κ΅μ‘μ² ννμ΄μ§μ 리λ΄μΌ λ±μ λ¬Έμ λ‘ νμ±μ΄ λΆκ°λ₯ ν μ μμ΅λλ€. v3 μ΄μ μ¬μ©μ κΆμ₯νλ©°, λ¬Έμ κ° λ°μν κ²½μ° μ΄μλ₯Ό λ¨κ²¨μ£Όμλ©΄ μ΅λν λΉ λ₯΄κ² μμ νμ¬ λ°μνλλ‘ νκ² μ΅λλ€.
3.1.2
3.1.1
- Issue #19 μλ‘ λ€λ₯Έ μ§μμ νκ΅ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ κ²½μ° λ°μνλ λ¬Έμ μμ (κ²μ, κΈμ, κ³΅μ§ λͺ¨λ ν΄λΉν¨)
- κ°λ° μμ‘΄μ± λͺ¨λ μ λ°μ΄νΈ
3.1.0
3.0.3
- Issue #15 λͺ¨λμ λΆλ¬μ¬ μ μλ λ¬Έμ μμ
3.0.2
3.0.1
- Issue #10 κ΅μ‘μ² μ§μλ³ μΈμ μ μ§νλλ‘ μμ
3.0.0
- node-school-kr -> school-krλ‘ λͺ¨λλͺ λ³κ²½
- HTTP μμ² μ½λλ₯Ό κΈ°μ‘΄μ requestμμ λͺ¨λ axiosλ‘ λ³κ²½
- νμ΄μ§ HTML νμ± λ°©μμμ API λ°μ΄ν° μμ² λ°©μμΌλ‘ λ³κ²½ν¨μ λ°λΌ λ°μ΄ν° μμ§ μ±λ₯ κ°μ -
μ½ 25%
- Issue #2 νκ΅ μ 보(μ½λ) μ‘°νλ₯Ό μν search λ©μλ μΆκ° - μ°Έκ³
- Issue #6 1~2μ λ°μ΄ν°λ₯Ό μ‘°νν κ²½μ° μλͺ»λ λ°μ΄ν°κ° λμ€λ λ¬Έμ μμ - μ°Έκ³
- 3.0.0 λΆν° μ¬μ©νμ§ μμ (Deprecated)
School.reset
School.getTargetURL
- 3.0.0μ λ§λλ‘ λ¬Έμ μμ , Issue #7 λ§ν¬λ€μ΄ νμ μμ
2.2.2
- Issue #5 λμ κ΅μ‘μ² URL λ¬Έμ μμ
2.2.1
- Issue #4 νμ¬μΌμ κΈ°λ³Έκ° μ€λ₯ μμ
2.2.0
- Issue #3 κΈ°λ³Έκ° μ΅μ μΆκ°
getMeal
,getCalendar
μ΅μ νΈμΆλ°©μ μΆκ°
2.1.2
- Issue #1 κ²½λΆ κ΅μ‘μ² μ μλ¬Έμ μμ
- μμ‘΄ λΌμ΄λΈλ¬λ¦¬μ 보μ μ·¨μ½μ± μ λ°μ΄νΈ
2.1.1
- μμ‘΄ λΌμ΄λΈλ¬λ¦¬μ 보μ μ·¨μ½μ± μ λ°μ΄νΈ
2.1.0
- κΈμ / νμ¬μΌμ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ λ λ λμ μμ μ§μ ν μ μλλ‘ κΈ°λ₯ μΆκ°
- κΈμ / νμ¬μΌμ λ°μ΄ν°μ λ λ μΆκ°
- READMEμ κ°λ° λ¬Έμ μΆκ° μμ±
2.0.1
- μμ‘΄ λΌμ΄λΈλ¬λ¦¬μ 보μ μ·¨μ½μ± μ λ°μ΄νΈ
2.0.0
- β» κΈ°μ‘΄ λ²μ κ³Ό
νΈνλμ§ μμ΅λλ€.
(μλ λ³κ²½μ¬νμ νμΈ ν΄μ£ΌμΈμ) - Type, Region νλ‘νΌν° κ°μ Symbol κΈ°λ°μΌλ‘ ꡬν
- μλ¬ λ°μ μν© μΆκ° λ° κΈ°μ‘΄ μλ¬ λ©μμ§ μμ
- getNotice λ©μλλͺ
λ³κ²½ ->
getCalendar
- getTargetURL λ©μλ μΆκ° (νμ±ν νκ² URLμ λ°νν©λλ€, μ°Έκ³ )
- μμ λ° README λ΄μ© μμ μ¬νμ λ§κ² μ λ°μ΄νΈ / λ΄μ© μΆκ°
- μ½λ μ£Όμ μ λ°μ΄νΈ
- β» κΈ°μ‘΄ λ²μ κ³Ό
1.0.1
- NPM μ μ₯μμ μ΄λ¦ λμΌνκ² Git μ μ₯μ μ΄λ¦ λ³κ²½ (μ΄λ―Έ μ¬μ©μ€μΈ μ΄λ¦)
- node-school -> node-school-kr
- README λ¬Έμ λ΄μ© μμ
- μλ¬ λ©μμ§ κ΅¬λΆ λ¬Έμ μΆκ° (κΈμ νμ± μλ¬μΈμ§ νμ¬μΌμ νμ± μλ¬μΈμ§ ꡬλΆ)
- NPM μ μ₯μμ μ΄λ¦ λμΌνκ² Git μ μ₯μ μ΄λ¦ λ³κ²½ (μ΄λ―Έ μ¬μ©μ€μΈ μ΄λ¦)
1.0.0
- 첫 λ²μ§Έ 릴리μ¦!
λ³Έ νλ‘μ νΈλ School APIλ₯Ό μ°Έκ³ νμ¬ Node.js νκ²½μμ μ¬μ©ν μ μλλ‘ μλ‘ ν¬ν
ν νλ‘μ νΈμ
λλ€.
3.0.0
λ²μ λΆν° μμ ν μλ‘κ² κ°λ°λμ΄ μ±λ₯ λ° μμ μ±μ΄ ν¬κ² κ°μ λμμ΅λλ€.