본문 바로가기

Programming Project/Node로 카톡-페메봇 만들기

Node.js로 카카오톡 플러스 친구 봇 만들기 05 (급식 api 사용하기, 급식 봇)


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)

이 글은 


Node.js로 카카오톡 플러스 친구 봇 만들기 01 (https://wingnim.tistory.com/entry/Nodejs%EB%A1%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%ED%94%8C%EB%9F%AC%EC%8A%A4-%EC%B9%9C%EA%B5%AC-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0-01)


로 부터 읽으면 되고


Node.js로 카카오톡 플러스 친구 봇 만들기 04 (https://wingnim.tistory.com/entry/Nodejs%EB%A1%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%ED%94%8C%EB%9F%AC%EC%8A%A4-%EC%B9%9C%EA%B5%AC-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0-04?category=750003)


에서 이어진다.



하... 진짜


너무 힘들었다 이번파트


https://github.com/5d-jh/school-menu-api


저 이 사이트 못찾았으면 이 포스팅 그만 할 뻔 했어요 ㄹㅇ;


감사하게도 이 사이트 분이 좋은 것을 알려주셨읍니다...


원래는 


https://stu.sen.go.kr/sts_sci_md00_001.do?schulCode=B100000487&schulCrseScCode=4&schulKndScCode=04&ay=2018&mm=05


이런 더러운 링크로 접속을 해야 하는 것일 뿐더러, 저 웹사이트 자체를 분석해야 하는 거였는데 이걸 손쉽게 해주셨다!


ㅋㅋㅋㅋㅋ 아 여튼 감격은 이쯤하고


일단 이번 포스트에서는 저번에 만든 카카오톡 봇에다가 우리 학교 오늘 급식을 추가할거다.




일단 프로젝트 폴더에서 터미널을 켜고 request 를 이렇게 --save까지 야무지게 붙여서 해당 폴더에서 다시 깔아주고


그 다음 message.js로 가서 




1번주석을 적은 곳과 2번주석을 적은 곳을 추가하면 된다.


간단히 말하자면 1번의 요상한 시간 설정하는거 같은 부분은


한국은 UTC +9 시간계에 살고있다. 


하지만 heroku 서버는 미국과 유럽에 있지.


그래서 현 위치 시간으로 하면 안되고 한국 시간으로 offset을 맞춰줘야 한다.


그런 코드고.


그 아래쪽

request () 뭐시기 는 아까 위에서 설명한 URL로 가면 자세하게 나오는데 ,


여튼 귀찮으면 봐라 설명해줄테니까.



http://schoolmenukr.ml/api/high/C100000486?year=2018&month=5


이런 코드가 있다고 할 때, 수정해야 할 곳은


http://schoolmenukr.ml/api/ 1번 - 학교유형/ 2번 - 학교코드 ?year= 자동으로 채워짐 &month= 자동으로 채워짐


두개다.


 1번 - 학교 유형 



이거 보고 학교 유형 쪽에 넣고



 2번 - 학교코드 



이건


https://www.meatwatch.go.kr/biz/bm/sel/schoolListPopup.do


여기가서 알아서 검색해서 찾아넣으셈



;


엥 뭐지 나는 진짜 힘들었는데 되게 글 분량이 얼마 안되네




ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ



여튼 message 코드 복붙해드림


그 .. 뭐냐 급식 답장이 좀 구린 모양으로 오는 것 같다 하면 



"중식 : " + monthly_food[nd.getDate()-1].breakfast + "\n석식 : " + monthly_food[nd.getDate()-1].lunch


이런식으로 좀 깔끔하게 보낼수도 있는데 


학교 바이 학교라서 조식이 없고 중식 석식만 있는 학교같은 경우에는

중식이 breakfast , 석식이 lunch에 들어오더라 ?


그래서 저런식으로 적어줘야 breakfast가 중식으로 나가고 lunch가 석식으로 나가더라고..



여튼 그럼 주석으로 원래 코드 달아놓고 코드 복붙해줌.


아 참, keyboard.js도 수정해줘야 함.


var express = require('express');
var router = express.Router();

/* 처음 들어왔을 때 */
router.get('/', function(req, res, next) {
const menu = {
type: 'buttons',
buttons: ["노래 추천해줘.", "네 노래로 추천해줘.","오늘 급식좀."]
};
res.set({
'content-type': 'application/json'
}).send(JSON.stringify(menu));
});

module.exports = router;


message.js



var express = require('express');
const request = require('request');

var router = express.Router();

let now_date = new Date();//1
let offset = +9;
var utc = now_date.getTime() + (now_date.getTimezoneOffset() * 60000);
var nd = new Date(utc + (3600000*offset));
var monthly_food="아직 불러오기 전입니다!";
request('http://schoolmenukr.ml/api/high/J100006763?year='+nd.getFullYear()+'&month='+(nd.getMonth()+1), (err, res, body) => {
monthly_food = JSON.parse(body);
});
/* 사용자의 답장이 들어왔을 때 */
router.post('/', function(req, res, next) {
const object = {
user_key: req.body.user_key, // 메시지를 발송한 user을 식별할 수 있는 key
type: req.body.type, // user가 보낸 message의 형태. text , photo로 이루어짐
content: req.body.content // user가 보낸 메시지 내용.
};
const menu = {
type: 'buttons',
buttons: ["노래 추천해줘.", "네 노래로 추천해줘.", "오늘 급식좀."]
};
var res_object;
if(object.type=="text")
{
if(object.content=="노래 추천해줘."){
res_object = {
"message": {
"text": '조지 - boat 어때?'
},
"keyboard": menu
};
}
else if(object.content=="네 노래로 추천해줘."){
res_object = {
"message": {
"text": 'Jinyo - 수면증 어때?'
},
"keyboard": menu
};
}
else if(object.content=="오늘 급식좀."){//2
res_object = {
"message": {
"text": "중식 : " + monthly_food[nd.getDate()-1].breakfast + "\n석식 : " + monthly_food[nd.getDate()-1].lunch
//JSON.stringify(monthly_food[nd.getDate()-1])
},
"keyboard": menu
};
}
}
res.set({ //6
'content-type': 'application/json'
}).send(JSON.stringify(res_object));
});

module.exports = router;




뭐 여튼 여기까지고 한번 그럼 각자 잘들 해보셔 ~