check.js 9.74 KB
var Info = require('./Info');
var ids = require('./all_ids')
const request = require('request');
const fs = require('fs');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var { google } = require('googleapis');
var service = google.youtube('v3');

//세팅값
var setting_userId = []; //유저아이디보관
var setting_Thumbnail = []; // 1:썸네일 출력(기본값) / 0:미출력
var setting_SendAmount = []; // 보낼 양 (1이상, 10이하의 정수) (기본값:1)
var setting_SendAddress = []; // 1:유튜브 주소 출력(기본값) / 0:미출력

function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색해서 나온 내용 전송하는 함수
{
    //sendMessage = JSON.stringify(response.data.items[0].snippet.title);

    sendMessage = "";
    var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
    for (var i = 0; i < SendAmount; i++) {

        temp_title[i] = title[i];

        temp_url2[i] = url2[i];
        temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));

        sendMessage += temp_title[i] + "\n" +
            temp_url[i] + "\n" + "\n";
    }


    console.log(sendMessage);
    if (thumbnail==1) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
        request.post(
            {
                url: TARGET_URL,
                headers:
                {
                    'Authorization': `Bearer ${Info.TOKEN}`
                },
                json:
                {
                    "replyToken": replyToken,
                    "messages":
                    [
                        {
                            "type": "image",
                            "originalContentUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg",
                            "previewImageUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg"
                        },
                        {
                            "type": "text",
                            "text": sendMessage
                        }
                    ]
                }
            }
        );
}

function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함수
{
    console.log(sendMessage);
    request.post(
        {
            url: TARGET_URL,
            headers:
            {
                'Authorization': `Bearer ${Info.TOKEN}`
            },
            json:
            {
                "replyToken": replyToken,
                "messages":
                [
                    {
                        "type": "text",
                        "text": sendMessage
                    }
                ]
            }
        }
    );
}

function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)//플레이리스트에서 나온 내용 전송하는 함수
{
    //sendMessage = JSON.stringify(response.data.items[0].snippet.title);

    sendMessage = "";
    var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
    for (var i = 0; i < SendAmount; i++) {

        temp_title[i] = JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, "");

        temp_url2[i] = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
        //temp_url2[i] = choice; 
        temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));

        //temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg";
        // 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌.

        sendMessage += temp_title[i] + "\n" +
            temp_url[i] + "\n" + "\n";
        // temp_thumpnail[i] + "\n" + "\n";
    }


    console.log(sendMessage);
    if (thumbnail==1) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
        request.post(
            {
                url: TARGET_URL,
                headers:
                {
                    'Authorization': `Bearer ${Info.TOKEN}`
                },
                json:
                {
                    "replyToken": replyToken,
                    "messages":
                    [
                        {
                            "type": "image",
                            "originalContentUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg",
                            "previewImageUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg"
                        },
                        {
                            "type": "text",
                            "text": sendMessage
                        }
                    ]
                }
            }
        );
}






exports.check = function (message, replyToken, userId) {


    if (setting_userId.indexOf(userId)==-1)
    {
        setting_userId.push(userId);
        setting_Thumbnail.push(1);
        setting_SendAmount.push(1);
        setting_SendAddress.push(1);
        console.log("없당");
    }
    else
    {
        console.log("있당");
    }
       


    //const rand_0to9 = Math.floor(Math.random() * 10);   // 0~9까지 난수생성
    var choice;
    var choose;

    switch (message) {
        case "힙합 플레이리스트":
            choose = 101;
            choice = ids.all_ids[choose]
            break;
        case "피아노 플레이리스트":
            choose = 102;
            choice = ids.all_ids[choose]
            break;
        case "팝 플레이리스트":
            choose = 103;
            choice = ids.all_ids[choose]
            break;
        case "신나는 플레이리스트":
            choose = 201;
            choice = ids.all_ids[choose]
            break;
        case "슬픈 플레이리스트":
            choose = 202;
            choice = ids.all_ids[choose]
            break;
        case "블랙핑크 플레이리스트":
            choose = 301;
            choice = ids.all_ids[choose]
            break;
        case "아이유 플레이리스트":
            choose = 302;
            choice = ids.all_ids[choose]
            break;
        case "레드벨벳 플레이리스트":
            choose = 303;
            choice = ids.all_ids[choose]
            break;
        case "트와이스 플레이리스트":
            choose = 304;
            choice = ids.all_ids[choose]
            break;
        case "도움말":
            choose = 001;
            choice = 0;
            break;
        case "설정":
            choose = 002;
            choice = 0;
            break;


        // 아래는 case 추가를 위한 템플릿     
        // case "":
        //     choose = ;
        //     choice = ids.all_ids[choose]

        default:
            choose = 500;
            choice = 0;
    }

    if (choose == 500) { //일반 검색
        
        var optionParams={
            q:message,
            part:"snippet",
            key:Info.YoutubeKey,
            maxResults:10
         };
        optionParams.q=encodeURI(optionParams.q);
        var url="https://www.googleapis.com/youtube/v3/search?";
        for(var option in optionParams){
            url+=option+"="+optionParams[option]+"&";
        }
        
        //url의마지막에 붙어있는 & 정리
        url=url.substr(0, url.length-1);
        
        request(url, function(err, res, body){
            var title=[]
            var url2=[]
            var data=JSON.parse(body).items;
            for(var content in data)
            {
                title.push(data[content].snippet.title);
                url2.push(data[content].id.videoId);
            }
            if (title.length==0)
                console.log('검색된 동영상이 없습니다.');
            else
                SEND(replyToken,title,url2,1,3,1);
        });
        
        
       /*
        service.videos.list
            (
                {
                    key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
                    part: 'snippet',
                    id: choice,
                    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 {
                        SEND(replyToken,response,choice,1,1,1);
                    }
                }

            )
            */
    }

    else if (choose == 001){ // 도움말
        sendMessage = "도움말 예시";
        SEND_TEXT(replyToken,sendMessage);
    }
    else if (choose == 002) { // 설정
        sendMessage = "설정 예시";
        SEND_TEXT(replyToken,sendMessage);
    }

    else { //플레이리스트
        service.playlistItems.list(
            {
            key: Info.YoutubeKey,
            part: 'snippet',
            fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
            maxResults: 10,
            playlistId: choice
            }, 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
                    SEND_LIST(replyToken,response,choice,1,10,1);
            }
        )
    }
    




}