곽원석

Mother Project_legacy file

1 +var express = require('express');
2 +var app = express();
3 +const line = require('@line/bot-sdk');
4 +
5 +
6 +//papago api
7 +var request = require('request');
8 +
9 +//번역 api_url
10 +var translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt';
11 +
12 +//언어감지 api_url
13 +var languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs'
14 +
15 +// Naver Auth Key
16 +//새로 발급받은 naver papago api id, pw 입력
17 +var client_id = 'xZMx34y7uru1v8lywZ2d';
18 +var client_secret = 'p6L7M7WsH9';
19 +
20 +const config = {
21 + channelAccessToken: 'mnny0MJSezgBXzR9C3Ddcc1Csdb7Y9jkvy2nqV5saOmvR2YOJ1/kj/2M0CNsLA+57B2qDpdUQ7WbCTtIKx/LAJ6Kwfop4tX3up7EM8H9EZK1td6GMbhhCb6wvUFVdb1PcTO4joCv8mspd3ubo8a+gAdB04t89/1O/w1cDnyilFU=',
22 + channelSecret: 'bde77633a16fc5bfbd532d5990c6170e',
23 +};
24 +
25 +
26 +// create LINE SDK client
27 +const client = new line.Client(config);
28 +
29 +// create Express app
30 +// about Express itself: https://expressjs.com/
31 +
32 +// register a webhook handler with middleware
33 +// about the middleware, please refer to doc
34 +app.post('/webhook', line.middleware(config), (req, res) => {
35 + Promise
36 + .all(req.body.events.map(handleEvent))
37 + .then((result) => res.json(result))
38 + .catch((err) => {
39 + console.error(err);
40 + res.status(200).end();
41 + });
42 +});
43 +
44 +// event handler
45 +function handleEvent(event) {
46 + if (event.type !== 'message' || event.message.type !== 'text') {
47 + // ignore non-text-message event
48 + return Promise.resolve(null);
49 + }
50 + return new Promise(function(resolve, reject) {
51 + //언어 감지 option
52 + var detect_options = {
53 + url : languagedetect_api_url,
54 + form : {'query': event.message.text},
55 + headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
56 + };
57 +
58 + //papago 언어 감지
59 + request.post(detect_options,function(error,response,body){
60 + console.log(response.statusCode);
61 + if(!error && response.statusCode == 200){
62 + var detect_body = JSON.parse(response.body);
63 + var source = '';
64 + var target = '';
65 + var result = { type: 'text', text:''};
66 +
67 + //언어 감지가 제대로 됐는지 확인
68 + console.log(detect_body.langCode);
69 +
70 +
71 + //번역은 한국어->영어 / 영어->한국어만 지원
72 + if(detect_body.langCode == 'ko'||detect_body.langCode == 'en'){
73 + source = detect_body.langCode == 'ko' ? 'ko':'en';
74 + target = source == 'ko' ? 'en':'ko';
75 + //papago 번역 option
76 + var options = {
77 + url: translate_api_url,
78 + // 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
79 + form: {'source':source, 'target':target, 'text':event.message.text},
80 + headers: {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret}
81 + };
82 +
83 + // Naver Post API
84 + request.post(options, function(error, response, body){
85 + // Translate API Sucess
86 + if(!error && response.statusCode == 200){
87 + // JSON
88 + var objBody = JSON.parse(response.body);
89 + // Message 잘 찍히는지 확인
90 +
91 + result.text = objBody.message.result.translatedText;
92 + console.log(result.text);
93 + //번역된 문장 보내기
94 + client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
95 + }
96 + });
97 + }
98 + // 메시지의 언어가 영어 또는 한국어가 아닐 경우
99 + else{
100 + result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
101 + client.replyMessage(event.replyToken,result).then(resolve).catch(reject);
102 + }
103 +
104 + }
105 +
106 + });
107 +
108 + });
109 + }
110 +
111 +app.listen(3000, function () {
112 + console.log('Linebot listening on port 3000!');
113 +});
This diff is collapsed. Click to expand it.
1 +{
2 + "name": "linebot",
3 + "version": "1.0.0",
4 + "description": "",
5 + "main": "app.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1",
8 + "start": "node server.js"
9 + },
10 + "author": "강수인",
11 + "license": "MIT",
12 + "dependencies": {
13 + "@line/bot-sdk": "^6.4.0",
14 + "express": "^4.16.4"
15 + }
16 +}