이유혁

merge

Showing 1 changed file with 87 additions and 86 deletions
1 -var express = require('express'); 1 +const express = require('express');
2 -var app = express();
3 const config = require('./API_config'); 2 const config = require('./API_config');
4 const line = require('@line/bot-sdk'); 3 const line = require('@line/bot-sdk');
4 +const request = require('request');
5 5
6 -//papago api 6 +const app = express();
7 -var request = require('request');
8 7
9 //번역 api_url 8 //번역 api_url
10 -var translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt'; 9 +const translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt';
11 10
12 //언어감지 api_url 11 //언어감지 api_url
13 -var languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs'; 12 +const languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs';
14 13
15 // Naver Auth Key 14 // Naver Auth Key
16 //새로 발급받은 naver papago api id, pw 입력 15 //새로 발급받은 naver papago api id, pw 입력
17 const client_id = config.client_id; 16 const client_id = config.client_id;
18 const client_secret = config.client_secret; 17 const client_secret = config.client_secret;
19 // Line Channel Access Tocken 18 // Line Channel Access Tocken
20 -const line_access = config.line_channel; 19 +const line_channel = config.line_channel;
21 20
22 // create LINE SDK client 21 // create LINE SDK client
23 -const client = new line.Client(line_access); 22 +const client = new line.Client(line_channel);
24 -
25 -// create Express app
26 -// about Express itself: https://expressjs.com/
27 23
28 // ELB health checker 24 // ELB health checker
29 app.get('/', (req, res) => { 25 app.get('/', (req, res) => {
30 - console.log('hello,,,,'); 26 + console.log('ELB health check');
31 res.writeHead(200, { "Content-Type": "text/html" }); 27 res.writeHead(200, { "Content-Type": "text/html" });
32 res.end(); 28 res.end();
33 }); 29 });
34 30
35 // register a webhook handler with middleware 31 // register a webhook handler with middleware
36 // about the middleware, please refer to doc 32 // about the middleware, please refer to doc
37 -app.post('/webhook', line.middleware(line_access), (req, res) => { 33 +app.post('/webhook', line.middleware(line_channel), (req, res) => {
38 - Promise 34 + const promises = req.body.events.map(async (event) => {
39 - .all(req.body.events.map(event => handleEvent(event))) 35 + let language_type = await language_detector(event);
40 - .then((result) => res.json(result)) 36 + let options = await option_maker(language_type, event);
41 - .catch((err) => { 37 + let result = await receive_result(options, event);
42 - console.error(err); 38 + client.replyMessage(event.replyToken,result);
43 - res.status(200).end(); 39 + })
40 + Promise
41 + .all(promises)
42 + .then((result) => res.json(result))
43 + .catch((err) => {
44 + console.error(err);
45 + res.status(200).end();
44 }); 46 });
45 }); 47 });
46 48
47 -// event handler 49 +const language_detector = (event) => {
48 -function handleEvent(event) { 50 + if (event.type !== 'message' || event.message.type !== 'text') {
49 - if (event.type !== 'message' || event.message.type !== 'text') { 51 + // ignore non-text-message event
50 - // ignore non-text-message event 52 + return reject(new Error('메세지 혹은, 텍스트가 아닙니다.'));
51 - return Promise.resolve(null); 53 + }
52 - } 54 + return new Promise((resolve) => {
53 - return new Promise(function(resolve, reject) { 55 + //언어 감지 option
54 - //언어 감지 option 56 + resolve({
55 - var detect_options = { 57 + url : languagedetect_api_url,
56 - url : languagedetect_api_url, 58 + form : {'query': event.message.text},
57 - form : {'query': event.message.text}, 59 + headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
58 - headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret} 60 + });
59 - }; 61 + })
60 - 62 +}
61 - //papago 언어 감지 63 +
62 - request.post(detect_options,function(error,response,body){ 64 +const option_maker = (language_type, event) => {
63 - console.log(response.statusCode); 65 + return new Promise((resolve, reject) => {
64 - if(!error && response.statusCode == 200){ 66 + request.post(language_type, (error,response) => {
65 - var detect_body = JSON.parse(response.body); 67 + console.log(response.statusCode);
66 - var source = ''; 68 + if(!error && response.statusCode == 200){
67 - var target = ''; 69 + let detect_body = JSON.parse(response.body);
68 - var result = { type: 'text', text:''}; 70 + let source = '';
69 - 71 + let target = '';
70 - //언어 감지가 제대로 됐는지 확인 72 + if (detect_body.langCode == 'ko'||detect_body.langCode =='en'){
71 - console.log(detect_body.langCode); 73 + source = detect_body.langCode =='ko'? 'ko':'en';
72 - 74 + target = detect_body.langCode =='ko'? 'en':'ko';
73 - 75 + }
74 - //번역은 한국어->영어 / 영어->한국어만 지원 76 + //언어 감지가 제대로 됐는지 확인
75 - if(detect_body.langCode == 'ko'||detect_body.langCode == 'en'){ 77 + console.log(detect_body.langCode);
76 - source = detect_body.langCode == 'ko' ? 'ko':'en'; 78 + source = detect_body.langCode;
77 - target = source == 'ko' ? 'en':'ko'; 79 +
78 - //papago 번역 option 80 + var options = {
79 - var options = { 81 + url: translate_api_url,
80 - url: translate_api_url, 82 + form: {'source':source, 'target': target, 'text':event.message.text},
81 - // 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text) 83 + headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
82 - form: {'source':source, 'target':target, 'text':event.message.text}, 84 + };
83 - headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret} 85 + resolve(options);
84 - }; 86 + }
85 - 87 + else{
86 - // Naver Post API 88 + reject(new Error("request is failed"));
87 - request.post(options, function(error, response, body){ 89 + }
88 - // Translate API Sucess 90 + })
89 - if(!error && response.statusCode == 200){ 91 + })
90 - // JSON 92 +}
91 - var objBody = JSON.parse(response.body); 93 +
92 - // Message 잘 찍히는지 확인 94 +const receive_result = (options, event) => {
93 - 95 + return new Promise((resolve, reject) => {
94 - result.text = objBody.message.result.translatedText; 96 + var result = { type:'text', text: ''};
95 - console.log(result.text); 97 + request.post(options, (error, response) => {
96 - //번역된 문장 보내기 98 + // Translate API Sucess
97 - client.replyMessage(event.replyToken,result).then(resolve).catch(reject); 99 + if(!error && response.statusCode == 200){
98 - } 100 + // JSON
99 - }); 101 + var objBody = JSON.parse(response.body);
100 - } 102 + // Message 잘 찍히는지 확인
101 - // 메시지의 언어가 영어 또는 한국어가 아닐 경우 103 + result.text = objBody.message.result.translatedText;
102 - else{ 104 + console.log(result.text);
103 - result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'; 105 + resolve(result);
104 - client.replyMessage(event.replyToken,result).then(resolve).catch(reject); 106 + }
105 - } 107 + else{
106 - 108 + result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
107 - } 109 + client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
108 - 110 + reject(new Error("request is failed"));
109 - }); 111 + }
110 - 112 + })
111 - }); 113 + })
112 - } 114 +}
113 -
114 115
115 app.listen(3000, function () { 116 app.listen(3000, function () {
116 console.log('Linebot listening on port 3000!'); 117 console.log('Linebot listening on port 3000!');
......