카카오봇

카카오봇 /시간표 구현하기

koreasunoo 2021. 12. 26. 10:56

안녕하세요 오늘은 /시간표를 입력했을 때 봇이 특정 학교 특정 반의 시간표를 알려주는 코드를 짜보겠습니다.

/급식과 마찬가지로 나이스에서 인증키를 발급받아야합니다(이미 발급 받았으면 그대로 사용하면 됩니다).

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

 

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

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

open.neis.go.kr

 

https://open.neis.go.kr/hub/hisTimetable?KEY=6b15c10192db4d8194e4b3c1b5df01c5&Type=json&plndex=1&pSize=20&ATPT_OFCDC_SC_CODE=B10&SD_SCHUL_CODE=7010059&AY=2021&SEM=2&ALL_TI_YMD=

 

open.neis.go.kr

위와 같이 학교코드, 교육청 코드, 학년 반 등을 입력하면 정갈하지 않은 날 것의 상태의 시간표 정보가 주어집니다.

밑의 코드를 이용하여 파싱및 전송 방법을 참고하시기 바랍니다.

function response(room, msg, sender, isGroupChat, replier, imageDB, packageName){
    msg = msg.trim();
    if(msg=="/시간표"){
        try{

            var now = new Date();     
            var year = now.getFullYear();
            var month = now.getMonth();
            var date = now.getDate();
            let hours = now.getHours();
            if(hours>=16 && hours<=23){
                date++;
            }
            
            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;
            result = Utils.getWebText("https://open.neis.go.kr/hub/hisTimetable?KEY=6b15c10192db4d8194e4b3c1b5df01c5&Type=json&plndex=1&pSize=20&ATPT_OFCDC_SC_CODE=B10&SD_SCHUL_CODE=7010059&AY=2021&SEM=2&ALL_TI_YMD="+total+"&GRADE=2&CLASS_NM="+room, false,false);
            result = result.split("{\"row\":[")[1].split("]}]}")[0];
            
            result = result.split("\"ITRT_CNTNT\":\"");
            var i;
            var timetable = "";
            for(i = 1; i<result.length; i++){
                result[i] = result[i].split("\",\"LOAD_DTM")[0];
                timetable+= result[i];
                if(i!=result.length-1){
                    timetable += "\n";
                }
                
            }
            replier.reply(year+"년 "+ month+"월 "+ date+"일 시간표는 \n"+ timetable);
        }
        catch(e){
            replier.reply("뒤에 반을 붙여주세요");
        }
        
        return 0;
    }
    var cmd = msg.substring(0, 4);
    
    var data = msg.replace(cmd,"");
    data = data.trim();
    data = data.substring(0, 2);
    data = data.split("반")[0];
    data = String( data );
    var timetable = "";
    
    if(cmd=="/시간표"){
        
        var now = new Date();     
        var year = now.getFullYear();
        var month = now.getMonth();
        var date = now.getDate();
        let hours = now.getHours();
        if(hours>=16 && hours<=23){
            date++;
        }
        
        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;
        
        
        try{
            
            var result = Utils.getWebText("https://open.neis.go.kr/hub/hisTimetable?KEY=6b15c10192db4d8194e4b3c1b5df01c5&Type=json&plndex=1&pSize=20&ATPT_OFCDC_SC_CODE=B10&SD_SCHUL_CODE=7010059&AY=2021&SEM=2&ALL_TI_YMD="+total+"&GRADE=2&CLASS_NM="+data, false,false);
            result = result.split("{\"row\":[")[1].split("]}]}")[0];
            
            result = result.split("\"ITRT_CNTNT\":\"");
            var i;
            
            for(i = 1; i<result.length; i++){
                result[i] = result[i].split("\",\"LOAD_DTM")[0];
                timetable+= result[i];
                if(i!=result.length-1){
                    timetable += "\n";
                }
                
            }
            replier.reply(year+"년 "+ month+"월 "+ date+"일 시간표는 \n"+ timetable);
        }
        catch(e){
            replier.reply("시간표 정보가 없습니다");
        }
    }
}