app.js
4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
var express = require('express');
var app = express();
const line = require('@line/bot-sdk');
const dotenv = require('dotenv');
var rhyme_kr = require('./Rhyme_Kr')
var refine_string = require('./Refine_String')
dotenv.config();
// txt 읽어오기
const fs = require('fs');
fs.readFile('./songdata/all.txt','utf8',function(err,data)
{
data = refine_string.refine_String_Last(data);
lyric_data = refine_string.refine_String(data);
});
//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 = process.env.client_id;
var client_secret = process.env.client_secret;
const config =
{
channelAccessToken: process.env.channelAccessToken,
channelSecret: process.env.channelSecret,
};
// 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);
*/
var rhyme_result = rhyme_kr.rhyme_kr(event.message.text,lyric_data);
rhyme_result = [...rhyme_result];
var string_result = "";
for(var i = 0 ; i < rhyme_result.length - 1;i++) // '이'가 결과값에 포함되는 것을 방지. 이건 임시 방편. 원인 찾아서 해결 필요.
string_result = string_result + rhyme_result[i] + " ";
result.text = string_result;
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!');
});