카카오봇

카카오봇 /급식 기능 구현하기

koreasunoo 2021. 12. 25. 00:13

경기고등학교 기준입니다

위 사진과 같이 "/급식"을 입력했을 때, 특정한 학교의 급식이 나오는 방법을 공유합니다.

 

일단 급식을 나이스에서 가져오는 것이기 때문에, 

https://open.neis.go.kr/portal/guide/actKeyPage.do

 

로그인 | 나이스 교육정보 개방 포털

로그인 원하시는 소셜서비스를 선택해 주세요. 복잡한 회원가입 절차없이 SNS 계정으로 인증 및 로그인하여Open API 등의 서비스를 편리하게 이용하실 수 있습니다.

open.neis.go.kr

나이스에서 제공하는 오픈 API를 사용하기 위해서는 인증키를 발급받아야하고, 위 링크에 들어가면 발급받을 수 있습니다.

 

위 링크의 인증키, 교육청코드, 학교 코드, 날짜 등을 제대로 입력한 후 url에 입력을 하면 

위 사진과 같은 결과가 나옵니다.

 밑의 코드를 이용하여 파싱하는 방법과 해당 사이트의 html을 가져오는 방법을 참고하시기 바랍니다

function response(room, msg, sender, isGroupChat, replier, imageDB, packageName){
    if(msg=="/급식"){
            var now = new Date();     
            var year = now.getFullYear();
            var month = now.getMonth();
            var date = now.getDate();
            month += 1;
            month = String( month );
            date = String( date );
            if(month.length==1){
                month = "0" + month;
            }
            if(date.length == 1){
                date = "0" + date;
            }
            var total = year + month + date;       
            var result = Utils.getWebText("https://open.neis.go.kr/hub/mealServiceDietInfo?KEY=인증키&Type=json&plndex=1&pSize=30&ATPT_OFCDC_SC_CODE=B10&SD_SCHUL_CODE=7010059&MLSV_YMD="+total, false,false).split("<body>")[1].split("</body>")[0];
            
            try{
                    
                calories = result.split("CAL_INFO\":\"")[1].split("\",\"NTR_INFO")[0];
                result = result.split("\",\"ORPLC")[0].split("\"DDISH_NM\":\"")[1].replace(/(<([^>]+)>)/g, "");
                result = result.replace(/amp;/gi, "");
                result = result.replace(/undefined/gi,"");
                result = result.replace(/\./gi, "");
                result = result.replace(/\*/gi, "");
                
                result = result.trim(); 
                result = result.replace(/^ +/gm,"");

                result = result.replace(/[0-9]/g, "");
                

            }
            catch(e){
                replier.reply("급식 정보가 없습니다");
            }

            result += "\n";
            result += "총 ";
            result += calories;
            replier.reply(result);
    }   
}