티스토리 뷰

[ school-kr ]


@@ Node.js 전용! @@










안녕하세요



얼마 전에 Node.js학교 급식 및 학사일정 파싱 모듈을 개발했습니다.



2017년 2월달부터 학교 급식 파싱에 대한 내용은 꾸준히 찾아보고 구현해왔는데

학사일정 부분에 대해서는 아래 라이브러리를 참고하여 새롭게 포팅했습니다.

https://github.com/agemor/school-api




위 라이브러리는 자바 라이브러리 이므로 Node.js 에서 사용이 불가능합니다.


그래서 저는 Node.js 에서 사용할 라이브러리로 새롭게 포팅했습니다.


[Github]

https://github.com/leegeunhyeok/school-kr



[NPM]

https://www.npmjs.com/package/school-kr



Node.js 웹 서버, 챗봇 API 서버 등 대한민국의 전국 학교(또는 병설유치원)의


급식정보

학사일정


이 필요하시면 위 라이브러리를 설치하여 사용하시면 됩니다.



데이터는 파싱하여 JSON형태로 변환할 수 있는 형식으로 제공이 되구요

자바스크립트 내에서는 객체가 JSON 형태이기 때문에 바로 사용이 가능합니다.




라이브러리 설치 방법




Node.js + NPM이 설치되어있어야 합니다.

(기본적으로 Node.js 설치 시 NPM은 기본으로 같이 설치 됨)




NPM에 업로드해두었으므로 편리하게 설치가 가능합니다.



npm install school-kr


또는


npm i school-kr




예제


아래 사진은 간단한 예제입니다.


학교는 광명경영회계고등학교를 기준으로 초기화한 후 진행하였습니다.



init() 초기화 부분의 값은 총 3개인데 필수 데이터입니다.


- 첫 번째 -

병설유치원, 초, 중, 고


- 두 번째 -

교육청 관할 지역


- 세 번째-

해당 학교 고유번호



위 3가지 값, 기타 추가 문서는 Github 또는 NPM에서 확인 가능합니다.

(예제 및 사용 방법, 기타 정보를 작성해두었습니다)



※ 2020.02.03 현재 3.0 버전으로 업데이트 되었습니다. ※

꼭 공식 문서에서 사용법을 확인해주세요.

(일부 사용법 변경 됨)






Promise 기반으로 개발하였기 때문에 비동기 함수에서 사용이 가능합니다.




결과




급식 데이터





학사일정 데이터



해당 날짜에 급식이 없거나, 학사일정이 없을 경우 빈 데이터로 반환됩니다.


급식 데이터의 경우 month, day, today 속성이 있는데

해당 속성은 각각 현재 시점의


달(Month)

일(Day)

오늘의 급식


추가로 저장되어있어서 데이터 수집 후 다시 처리하지 않고도 빠르게 오늘 급식 및 날짜를 확인할 수 있습니다.




학사일정 데이터의 경우는 month만 존재하기 제공됩니다.




라이선스




본 프로젝트의 라이선스는 MIT 라이선스입니다.





오류 제보



파싱이 안되거나 기타 오류가 발생할 경우 댓글에 남겨주시거나 Github에 이슈 남겨주시면 확인 후 수정하도록 하겠습니다.


[ Github 이슈 ]

https://github.com/leegeunhyeok/school-kr/issues







깃허브 사용자이시면 Star 한번씩 눌러주세요~!!


 팔로우도 환영합니다!


https://github.com/leegeunhyeok/school-kr










기타 질문사항은 댓글 또는 Github 이슈에 글 남겨주세요!




감사합니다.

댓글
  • 프로필사진 전제영 Javascript나 node.js에 아무런 지식 없이.. 강의만 따라가고 있는 학생입니다!
    이 라이브러리에서 today의 급식만 따로 빼내는 방법 알려주실 수 있나요??
    node.js 파싱이라고 구글링을 해보았는데, 위에 있는 코드랑 많이 달라서요..
    2018.09.11 16:46
  • 프로필사진 BlogIcon 이근둥 안녕하세요 본 라이브러리에서 급식을 조회할 경우 1일부터 30(31)일 까지의 급식을 제공합니다.

    데이터는 객체로 묶어서 전달이 되는데 객체에서 원하는 키에 접근하는 방법은 아래 2 방법이 있습니다.


    obj.key
    obj['key']


    만약 급식 데이터가 meal 변수에 있다고 하면 meal.today 또는 meal['today']로 today에 해당하는 값만 접근할 수 있습니다.
    2018.09.13 13:15 신고
  • 프로필사진 전제영 감사합니다!! 2018.09.17 21:56
  • 프로필사진 전제영 인스턴스 생성 후
    const sampleAsync = async function() {
    var meal = await school.getMeal()
    console.log(meal.today)
    }

    sampleAsync()

    다음과 같은 코드는 로컬 환경에서 구동이 잘 됩니다.
    하지만 동일 코드를 웹 서버에서 구동을 하려고 하니까
    const sampleAsync = async function() {
    ^^^^^^^^

    SyntaxError: Unexpected token function
    다음과 같은 에러가 발생하네요.. 라이브러리를 설치했는데도 이 증상이 발생하는데, 어떤 오류인지 알 수 있을까요?
    2018.09.17 21:16
  • 프로필사진 BlogIcon 이근둥 async 키워드 때문인것같습니다. async function 문법은 node.js v7 이상부터 지원하지만 기본적으로 잠겨있어서 사용할 수 없습니다.

    node --harmony-async-await 파일.js 로 실행시키거나 Node.js v8 이상 버전을 사용하시면 됩니다
    2018.09.20 12:14 신고
  • 프로필사진 이현탁 이걸 카카오톡 봇이랑 합치면 어떻게 만들어야 할까요.... 답변 부탁드려요.. 코드도 같이 주시면 감사합니다! 2018.10.04 08:00
  • 프로필사진 BlogIcon 이근둥 app.post('message', ...) 내부에 위 라이브러리를 호출하여(getMeal) 데이터를 보내주면 됩니다. 2018.10.04 10:54 신고
  • 프로필사진 이현탁 으아.... app.post('/message', function(req, res){
    var msg = req.body.content;
    console.log('전달받은 메시지' + msg);
    var send = {};
    switch(msg) {
    case '오늘 급식':
    send = {
    'message' : {
    'text': '몰라요'
    }
    }
    핳 죄송하지만 좀 부탁드릴게용...ㅠㅠㅠ
    2018.10.04 13:49
  • 프로필사진 BlogIcon 이근둥 const School = require('node-school-kr')

    /* 객체 생성 */
    const school = new School()

    /* 아래 예제는 경기도의 광명경영회계고등학교를 기준으로 함 */
    /* 데이터 불러오기 위해서는 필수로 호출 (처음 1회만 진행) */
    school.init(school.eduType.high, school.region.gyeonggi, 'J100000488')

    ...중략...

    app.post('/message', function (req, res) {
    var msg = req.body.content

    switch (msg) {
    case '오늘 급식': {
    school.getMeal().then(function (result) {
    // 결과 가져온 후 클라이언트에게 응답
    res.json({
    'message' : {
    'text': result['today']
    }
    })
    })
    }

    default: {
    res.json({
    'message' : {
    'text': '알 수 없는 명령'
    }
    })
    }
    }
    })

    ...중략...
    2018.10.05 10:42 신고
  • 프로필사진 BlogIcon 이근둥 프로그래밍 경험이 많이 없으시다면 자바스크립트 기초를 익히시고 진행하시는게 도움이 됩니다!

    제가 올린 챗봇 강좌, 급식 라이브러리는 콜백함수나 프라미스, 비동기함수 개념까지 어느정도 알고 계셔야 사용할 때 어려움이 없습니다.
    2018.10.05 10:45 신고
  • 프로필사진 X 궁금한게 있습니다.
    컴퓨터시간을 가져와서 오늘 밥을 알려주는 건가요?
    아니면 나이스의 서버 시간을 가져오는 건가요?
    2019.01.13 16:56
  • 프로필사진 BlogIcon 이근둥 코드가 실행되는 컴퓨터의 시간 기준으로 데이터를 수집합니다. 2019.01.15 16:16 신고
  • 프로필사진 비밀댓글입니다 2019.02.20 23:06
  • 프로필사진 BlogIcon 이근둥 lghlove0509@naver.com 으로 보내주시면 됩니다~

    Node.js에 node-schedule 이라는 모듈이 있는데 이를 사용하면 특정 시간마다 코드를 실행하실 수 있습니다. 이 부분을 알아보시면 도움될것같아요
    2019.03.11 20:54 신고
  • 프로필사진 네모네모 react-native 에서 개발을 해보려는데

    import React, {component} from 'react';
    import { StyleSheet, Text, View } from 'react-native';

    export default class App extends React.Component {
    getget(){
    const school = new School()
    school.init(School.Type.HIGH, School.Region.GYEONGGI, 'J100004971')
    console.log(school.getMeal)
    }
    render(){
    return (
    <View style={styles.container}>
    <Text>Open up App.js to start working on your app!</Text>
    </View>
    );
    }
    }

    const styles = StyleSheet.create({
    container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
    },
    });

    이렇게 했는데 unable to resolve the module crypto 오류가 납니다 어떻게 해야하나요
    2019.08.05 15:39
  • 프로필사진 BlogIcon 이근둥 RN에 대해선 잘 모르지만 아래 모듈을 설치하면 해결된다는 자료를 확인했습니다


    rn-nodeify
    2019.08.05 15:42 신고
  • 프로필사진 근둥님팬 안녕하세요 혹시 급식 이미지도 같이 있나요? 2020.06.12 23:20
  • 프로필사진 BlogIcon 이근둥 급식 이미지는 교육청에서 제공하지 않기 때문에 포함되어있지 않습니다. ㅜㅜ 2020.06.25 14:31 신고
댓글쓰기 폼