곽원석

Update app.js

Delete app_mother_legacy.js
......@@ -7,6 +7,7 @@ var request = require('request');
// api로 받아올 데이터포맷이 xml이므로 json으로 파싱할 필요가 있음
var convert = require('xml-js');
const bodyParser = require('body-parser');
var moment = require('moment');
// 라인 메신져
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
......@@ -18,7 +19,6 @@ const SERVICE_KEY = 'DMUPOq6b%2B%2F1gqfLEXQ6bnhgoTO73BfPprA6HVNcV%2F6vHMGG%2Bgiw
queryParams = '?' + encodeURIComponent('ServiceKey') + '=' + SERVICE_KEY; // Service Key
queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1');
queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('4');
var date;
var menu = 0;
var start_checker = false;
......@@ -60,11 +60,11 @@ app.post('/hook', function (req, res) {
"messages":[
{
"type":"text",
"text":"명령어 : /코로나 or /corona 로 코로나 19 bot을 시작하셨습니다."
"text":"명령어 : " + message.text + " 로 코로나 19 bot을 시작하셨습니다."
},
{
"type":"text",
"text":"명령어 :\n1. 확진자 수 :\t/확진자\n2. 격리해제 수 :\t/격리해제\n3. 검사진행 수 :\t/검사진행\n4. 사망자 수 :\t/사망자\n5. 치료중 환자 수 :\t/치료중\n6. 결과음성 수 :\t/결과음성\n7. 누적검사 수 :\t/누적검사\n8. 누적 확진률 :\t/누적확진\n"
"text":"명령어 :\n1. 확진자 수 :\t\t\t\t\t\t\t/확진자\n2. 격리해제 수 :\t\t/격리해제\n3. 검사진행 수 :\t\t/검사진행\n4. 사망자 수 :\t\t\t\t\t\t\t/사망자\n5. 치료중 환자 수 :\t/치료중\n6. 결과음성 수 :\t\t/결과음성\n7. 누적검사 수 :\t\t/누적검사\n8. 누적 확진률 :\t\t/누적확진\n"
}
]
}
......@@ -92,7 +92,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -119,7 +119,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -146,7 +146,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -173,7 +173,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -200,7 +200,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -227,7 +227,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -254,7 +254,7 @@ app.post('/hook', function (req, res) {
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -277,11 +277,11 @@ app.post('/hook', function (req, res) {
"messages":[
{
"type":"text",
"text":"확인하고 싶으신 일자를 적어주세요."
"text":"확인하고 싶으신 일자를 적어주세요.\n포맷 : YYYYMMDD 입니다."
},
{
"type":"text",
"text":"예시) 20201209"
"text":"포맷) YYYYMMDD"
}
]
}
......@@ -303,7 +303,7 @@ app.post('/hook', function (req, res) {
"messages":[
{
"type":"text",
"text":"선택하신 정보가 정확하지 않거나 없습니다.\\n처음부터 다시 진행해주세요."
"text":"선택하신 정보가 정확하지 않거나 없습니다.\n처음부터 다시 진행해주세요."
},
]
}
......@@ -314,10 +314,9 @@ app.post('/hook', function (req, res) {
return;
}
if((menu != 0) && (message.text)){
date = message.text;
queryParams += '&' + encodeURIComponent('startCreateDt') + '=' + encodeURIComponent(date);
queryParams += '&' + encodeURIComponent('endCreateDt') + '=' + encodeURIComponent(date);
if((menu != 0) && moment(message.text).isAfter(20200301)){
today = message.text;
queryParams += '&' + encodeURIComponent('endCreateDt') + '=' + encodeURIComponent(today);
switch(menu){
case 1:
bot_reply_1(eventObj.replyToken, message);
......@@ -367,6 +366,27 @@ app.post('/hook', function (req, res) {
console.log(body)
});
}
else{
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages":[
{
"type":"text",
"text":"바른 날짜를 입력해주세요.."
}
]
}
},(error, response, body) => {
console.log(body)
});
}
res.sendStatus(200);
});
......@@ -383,7 +403,8 @@ function bot_reply_1(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
......@@ -400,11 +421,11 @@ function bot_reply_1(replyToken, message) {
},
{
"type":"text",
"text": "확진자 수 : " + resultMessage.decideCnt._text
"text": "확진자 수 : " + (parseInt(resultMessage2.decideCnt._text)-parseInt(resultMessage1.decideCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......@@ -426,8 +447,8 @@ function bot_reply_2(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
url: TARGET_URL,
......@@ -443,11 +464,11 @@ function bot_reply_2(replyToken, message) {
},
{
"type":"text",
"text": "격리해제 수 : " + resultMessage.clearCnt._text
"text": "격리해제 수 : " + (parseInt(resultMessage2.clearCnt._text)-parseInt(resultMessage1.clearCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......@@ -469,8 +490,8 @@ function bot_reply_3(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
url: TARGET_URL,
......@@ -486,11 +507,11 @@ function bot_reply_3(replyToken, message) {
},
{
"type":"text",
"text": "검사진행 수 : " + resultMessage.examCnt._text
"text": "검사진행 수 : " + (parseInt(resultMessage2.examCnt._text)-parseInt(resultMessage1.examCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......@@ -512,8 +533,8 @@ function bot_reply_4(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
url: TARGET_URL,
......@@ -529,11 +550,11 @@ function bot_reply_4(replyToken, message) {
},
{
"type":"text",
"text": "사망자 수 : " + resultMessage.deathCnt._text
"text": "사망자 수 : " + (parseInt(resultMessage2.deathCnt._text)-parseInt(resultMessage1.deathCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......@@ -555,8 +576,8 @@ function bot_reply_5(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
url: TARGET_URL,
......@@ -572,11 +593,11 @@ function bot_reply_5(replyToken, message) {
},
{
"type":"text",
"text": "치료중 환자 수 : " + resultMessage.careCnt._text
"text": "치료중 환자 수 : " + (parseInt(resultMessage2.careCnt._text)-parseInt(resultMessage1.careCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......@@ -598,8 +619,8 @@ function bot_reply_6(replyToken, message) {
const jsonData = JSON.parse(xmlToJson); // json text -> json object
console.log('Reponse received', xmlToJson); // json text
var resultMessage = jsonData.response.body.items.item;
var resultMessage1 = jsonData.response.body.items.item[1];
var resultMessage2 = jsonData.response.body.items.item[0];
request.post(
{
url: TARGET_URL,
......@@ -615,11 +636,11 @@ function bot_reply_6(replyToken, message) {
},
{
"type":"text",
"text": "결과 음성 수 : " + resultMessage.resutlNegCnt._text
"text": "결과 음성 수 : " + (parseInt(resultMessage2.resutlNegCnt._text)-parseInt(resultMessage1.resutlNegCnt._text))
},
{
"type":"text",
"text": "등록일시분초 : " + resultMessage.createDt._text
"text": "등록일시분초 : " + resultMessage2.createDt._text
}
]
}
......
var express = require('express');
var app = express();
const line = require('@line/bot-sdk');
//papago api
var request = require('request');
//번역 api_url
var translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt';
//언어감지 api_url
var languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs'
// Naver Auth Key
//새로 발급받은 naver papago api id, pw 입력
var client_id = 'xZMx34y7uru1v8lywZ2d';
var client_secret = 'p6L7M7WsH9';
const config = {
channelAccessToken: 'mnny0MJSezgBXzR9C3Ddcc1Csdb7Y9jkvy2nqV5saOmvR2YOJ1/kj/2M0CNsLA+57B2qDpdUQ7WbCTtIKx/LAJ6Kwfop4tX3up7EM8H9EZK1td6GMbhhCb6wvUFVdb1PcTO4joCv8mspd3ubo8a+gAdB04t89/1O/w1cDnyilFU=',
channelSecret: 'bde77633a16fc5bfbd532d5990c6170e',
};
// create LINE SDK client
const client = new line.Client(config);
// create Express app
// about Express itself: https://expressjs.com/
// register a webhook handler with middleware
// about the middleware, please refer to doc
app.post('/webhook', line.middleware(config), (req, res) => {
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result))
.catch((err) => {
console.error(err);
res.status(200).end();
});
});
// event handler
function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
// ignore non-text-message event
return Promise.resolve(null);
}
return new Promise(function(resolve, reject) {
//언어 감지 option
var detect_options = {
url : languagedetect_api_url,
form : {'query': event.message.text},
headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
};
//papago 언어 감지
request.post(detect_options,function(error,response,body){
console.log(response.statusCode);
if(!error && response.statusCode == 200){
var detect_body = JSON.parse(response.body);
var source = '';
var target = '';
var result = { type: 'text', text:''};
//언어 감지가 제대로 됐는지 확인
console.log(detect_body.langCode);
//번역은 한국어->영어 / 영어->한국어만 지원
if(detect_body.langCode == 'ko'||detect_body.langCode == 'en'){
source = detect_body.langCode == 'ko' ? 'ko':'en';
target = source == 'ko' ? 'en':'ko';
//papago 번역 option
var options = {
url: translate_api_url,
// 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
form: {'source':source, 'target':target, 'text':event.message.text},
headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
};
// Naver Post API
request.post(options, function(error, response, body){
// Translate API Sucess
if(!error && response.statusCode == 200){
// JSON
var objBody = JSON.parse(response.body);
// Message 잘 찍히는지 확인
result.text = objBody.message.result.translatedText;
console.log(result.text);
//번역된 문장 보내기
client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
}
});
}
// 메시지의 언어가 영어 또는 한국어가 아닐 경우
else{
result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
}
}
});
});
}
app.listen(3000, function () {
console.log('Linebot listening on port 3000!');
});