index.js 6.09 KB
var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'Kb1/rQYz4MUhF8XyKQv7z9x0MxVQ5bX/XO8S/yt/1qQEJVAbsEFAaMvXKEOx9Umr7KhivfyDPfZHRRLFPngR0O4ZGWV2VFses8ufPE7uAdvYr4G6keBNAU69nBz5IC71HfbIrUHxXYqD7GfhVwXzpwdB04t89/1O/w1cDnyilFU='
const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt'
const PAPAGO_ID = 'kwoxKGTi6azBaW9aSVxe'
const PAPAGO_SECRET = 'svB_MM61oD'
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2020105631.oss2021.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());

/// ----
var { google } = require('googleapis');
/// ----

app.post('/hook', function (req, res) {

    var eventObj = req.body.events[0];
    var source = eventObj.source;
    var message = eventObj.message;

    // request log
    console.log('======================', new Date() ,'======================');
    console.log('[request]', req.body);
    console.log('[request source] ', eventObj.source);
    console.log('[request message]', eventObj.message);

    trans(eventObj.replyToken, eventObj.message.text);
    

    res.sendStatus(200);
});

function trans(replyToken, message) {

    request.post(

        {
            url: PAPAGO_URL,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Naver-Client-Id': `${PAPAGO_ID}`,
                'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
            },
            body: 'source=ko&target=en&text=' + message,
            json:true
        },
        
       (error, response, body) => {
            if(!error && response.statusCode == 200)
        {
                // message 가 사용자에게서 입력받은 메시지 내용입니다. sendMessage 는 보낼 메시지 내용입니다.
                // 위에 PAPAGO API부분은 추후 API를 연동시킬 때 맞춰서 작성하기 쉽도록 템플릿을 남겨놓았습니다. 자세한 정보는 교수님 학습 자료의 experiment의 trans 폴더를 참고하세요.
                // (현재 코드에선 PAPAGO API의 작동 결과는 반영되지 않습니다.)
                //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
                // var sendMessage;

                    // --------
                if (message=="노래 추천해줘")
                {
                    var sendMessage = "아이유의 노래를 추천드립니다.";
                    console.log(typeof(sendMessage));
                    console.log(sendMessage);
                    
                }
                else
                {
                    // var sendMessage = "무슨 말인지 못알아먹겠습니다";
                    
                    // --------
                    var service = google.youtube('v3');
                    service.videos.list({
                        key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
                        part: 'snippet,statistics',
                        id: 'p5iu1V30myk', // 동영상 Id
                        fields: 'items(snippet(title))'
                    }, function(err, response) {
                        if (err) {
                            console.log('The API returned an error: ',err);
                            return;
                        }

                        var video = response.data.items;
                        if(video.length ==0){
                            console.log('검색된 동영상이 없습니다.');
                        } else {
                            // var sendMessage ="123";
                            // console.log(JSON.stringify(response.data.items[0].snippet.title));// 콘솔에 출력
                            // console.log(JSON.stringify(response.data.items[0].snippet));// 콘솔에 출력
                            // console.log(JSON.stringify(response.data.items[0]));// 콘솔에 출력
                            // console.log(JSON.stringify(response.data));// 콘솔에 출력
                                

                            var sendMessage = JSON.stringify(response.data.items[0].snippet.title);
                            // sendMessage = response.data.items[0].snippet.title;
                            console.log(sendMessage);
                            console.log(typeof (sendMessage)); 
                        }
                    })
                    // // --------
                }
                //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
                

                console.log("11111");
                console.log(body.message);
                console.log("11111");
                // console.log(typeof(response.data.items[0].snippet.title));

                request.post(
                    {
                        url: TARGET_URL,
                        headers: {
                            'Authorization': `Bearer ${TOKEN}`
                        },
                        json: {
                            "replyToken":replyToken,
                            "messages":[
                                {
                                    "type":"text",
                                    "text":sendMessage
                                }
                            ]
                        }
                    },(error, response, body) => {
                        console.log(body)
                    });
            }
        });
}

try {
    const option = {
      ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
      key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
      cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
    };
  
    HTTPS.createServer(option, app).listen(sslport, () => {
      console.log(`[HTTPS] Server is started on port ${sslport}`);
    });
  } catch (error) {
    console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
    console.log(error);
  }