CommentLoadingTest.js 4.93 KB
var http = require('http');
var fs = require('fs'); //모듈이라 부름
var url = require('url');
var testFolder = './data';
var qs = require('querystring');
var path = require('path');
const {google} = require("googleapis");
const service = google.youtube('v3');
const apiKey = 'AIzaSyCjBrFKnBlGvxsfOD-qJP8nBkdEoqKRHu8'; //api키
let videoNum = "TpPwI_Lo0YY"; //비디오 주소(예시)
var commentList = new Array();
var commentNum = 0;
var savednpt = ''

function loadcomment(ApiKey, VideoNum, npt, n){
    return service.commentThreads.list({
        "key":ApiKey,
        "part":[
            "snippet, replies"
        ],
        "videoId":VideoNum,//비디오 주소
        "maxResults" : 50,
        "pageToken" : npt
    }).then(function(response) {
        //console.log("Response", response);
        for(let iter = 0; iter < response.data.pageInfo.totalResults; iter++){
            let tempComment = {
                'name' : response.data.items[iter].snippet.topLevelComment.snippet.authorDisplayName,
                'image' : response.data.items[iter].snippet.topLevelComment.snippet.authorProfileImageUrl,
                'text' : response.data.items[iter].snippet.topLevelComment.snippet.textDisplay
            }
            commentList.push(tempComment);
            commentNum += 1;
        }
        //console.log(response.data.items[0].snippet.topLevelComment.snippet.textDisplay);
        //console.log(response.data.items[1].snippet.topLevelComment.snippet.textDisplay);
        npt = response.data.nextPageToken;

        if(response.data.pageInfo.totalResults == response.data.pageInfo.resultsPerPage){
            if( n > 1 ){
                loadcomment(ApiKey, VideoNum, npt, n - 1);
            }else{
                savednpt = npt; //만약 댓글을 n번 불러온 후에 댓글이 더 남아있으면 savednpt 갱신
            }
        }else{
            console.log('end page'); // 댓글의 마지막 페이지
        }
    },
    function(err) { console.error("Execute error", err); });
}

var app = http.createServer(function(request,response){ // request는 브라우저가 주는 정보, response는 우리가 브라우저에게 줄 정보
    var _url = request.url; // query string이 담김 ex) /?id=HTML
    var queryData = url.parse(_url, true).query; // query string을 추출하였음 나중에 불러올때는 queryData.(값의 이름)
    var pathname = url.parse(_url,true).pathname;
    var body;
    if(pathname === '/'){
        body = `
        <!doctype html>
        <html>
        <head>
          <title>Youtube Comment</title>
          <meta charset="utf-8">
        </head>
        <body>
        <form action="http://localhost:3000/search" method="get">
                  <p>
                      <textarea name="videourl" placeholder="Write your video Url"></textarea>
                  </p>
                  <p>
                      <input type="submit">
                  </p>
                  </form>
        </body>
        </html>    
        `;
        response.writeHead(200);
        response.end(body);
    }
    else if(pathname === '/search'){
        commentList.splice(0);
        commentNum = 0; //코멘트 리스트 초기화

        videoNum = queryData.videourl;
        console.log(videoNum);
        let npt = ""
        loadcomment(apiKey,videoNum,npt,2).then(()=>{
            setTimeout(()=>{ //딜레이를 주어 강제로 댓글을 여러번 불러오도록 구현, async화 필요.
                let commentDisplay = "";
                console.log(commentNum);
                for(let iterArr = 0; iterArr < commentNum; iterArr++){
                    commentDisplay += `<br>${commentList[iterArr].name}<br>${commentList[iterArr].text}<br><br>`
                }
                body = `
                <!doctype html>
                <html>
                <head>
                <title>Youtube Comment</title>
                <meta charset="utf-8">
                </head>
                <body>
                <form action="http://localhost:3000/search" method="get">
                        <p>
                            <textarea name="videourl" placeholder="Write your video Url" >${videoNum}</textarea>
                        </p>
                        <p>
                            <input type="submit">
                        </p>
                        </form>
                            <br>
                            <br>
                        <iframe width="560" height="315" src="https://www.youtube.com/embed/${videoNum}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

                        <br>
                        <br>
                        ${commentDisplay}
                </body>
                </html>    
                `;
                response.writeHead(200);
                response.end(body);
            },1000);
            
        })
    }
});
app.listen(3000);