나혜원

ud

Showing 1 changed file with 220 additions and 0 deletions
var createServer = require("auto-sni");
var express = require("express");
var app = express();
const line = require('@line/bot-sdk');
var request = require('request');
var https=require('https');
var http=require('http');
const lex = require('greenlock-express').create({
version: 'draft-11', // 버전2
store: require('greenlock-store-fs'),
configDir: '/etc/letsencrypt', // 또는 ~/letsencrypt/etc
approveDomains: (opts, certs, cb) => {
if (certs) {
opts.domains = ['oss.chatbot.bu.to', 'oss.chatbot.bu.to'];
} else {
opts.email = 'sweun1@naver.com';
opts.agreeTos = true;
}
cb(null, { options: opts, certs });
},
renewWithin: 81 * 24 * 60 * 60 * 1000,
renewBy: 80 * 24 * 60 * 60 * 1000,
});//papago api
https.createServer(lex.httpsOptions, lex.middleware(app)).listen((process.env.SSL_PORT || 443),()=>{
console.log("server on 443");
});
http.createServer(lex.middleware(require('redirect-https')())).listen(process.env.PORT || 80,()=>{
console.log("server on 80");
});
//번역 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 = 'bIYcswH22VlQqT8OkkLm';
var client_secret = 'qLaERoks0u';
const config = {
channelAccessToken: 'dWno95uZ/FLPM5BoTUIM1kPenQ+UsEHYSWphPWcOxyjS7eylg6jhocxvJCeV8YumuVvYf+3bE/696ZSkOPJitxhXbXDe+1p2WoyCbHzD8KxxF1EKo6zvHfnhsIA8kZS93lNzUTQr1FVWaMmRKl7NzwdB04t89/1O/w1cDnyilFU=',
channelSecret: '75a2fd95ec26d716cac6fcdd520b9b9c'
};
// 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
var cheerio = require('cheerio');
var data = require('./event.json');
//json 불러오기
var data_list = data["DATA"]
var concert_list = [];
for(var i = 0; i < data_list.length; i++){
if (data_list[i].codename=="콘서트"){
concert_list.push(data_list[i].title);
}
}
for(var i = 0; i < concert_list.length; i++){
console.log(i+1,'. ',concert_list[i],'\n');
}
//콘서트 목록 만들기
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(res.statusCode);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result))
.catch((err)=>{console.log(err);
})
});
// event handler
function handleEvent(event) {
console.log(event.message);
if (event.type !== 'message' || event.message.type !== 'text') {
// ignore non-text-message event
return Promise.resolve(null);
}
else if(event.message.text.substring(0,6)=='콘서트 보기'){
return new Promise(function(resolve, reject)
{
var showlist = { type: 'text', text:''};
for(var i = 0; i < concert_list.length; i++)
{
showlist.text+=i+1 + ". " + concert_list[i] + "\n";
}
console.log(showlist.text);
var result={type:'text',text:showlist.text}
client.replyMessage(event.replyToken, result).then(resolve).catch(reject);
});
}
else if(isNaN(event.message.text)){
var selectnum = (event.message.text*1);
if(selectnum >=0 || selectnum <=27){
result.text = '목록에 존재하지 않는 콘서트입니다.';
client.replyMessage(event.replyToken, result).then(resolve).catch(reject);
}
return new Promise(function(resolve, reject){
var concert_name = concert_list[selectnum-1];
var $ = cheerio.load(concert_name);
var keyword = $.text();
console.log(keyword);
var options = {method: 'GET',
url: 'https://www.googleapis.com/youtube/v3/search',
qs: { key: 'AIzaSyB4b-n8SSv73CLDKvFigpLPYA6yWG2JQ9A',
part: 'id',
maxResults: '1',
order: 'relevance',
q: keyword,
type: 'video'}
};
var videourl = { type: 'url', label: '관련 영상', url:''};
request(options, function(error,result,body){
if(error) throw new Error(error);
var temp = body.split(':');
videourl.url += "https://www.youtube.com/watch?v=" + temp1[13].substr(2,11);
});
console.log(videourl.url);
client.replyMessage(event.replyToken, videourl).then(resolve).catch(reject);
})};
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(res.statusCode);
Promise
.all(req.body.events.map(handleEvent2))
.then((result) => res.json(result))
.catch((err)=>{console.log(err);
})
});
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,async (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,"Content-Type": "application/x-www-form-urlencoded"}
};
// Naver Post API
await 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);
//번역된 문장 보내기
client.replyMessage(event.replyToken,result).then(resolve);
}
});
}
// 메시지의 언어가 영어 또는 한국어가 아닐 경우
else{
result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
client.replyMessage(event.replyToken,result).then(resolve);
}
}
else{
console.log("status code is not 200");
}
});
});
}