Yuncheol Kwak

Merge branch 'develop' of http://khuhub.khu.ac.kr/2019102147/youtube-comment-seperator into develop

1 +{
2 + "youtubeAPI" : "",//insert your youtube API key.
3 + "papagoClientID" : "", //insert your papago client ID.
4 + "papagoClientSecret":"" //insert your papago client secret.
5 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -7,7 +7,8 @@ var qs = require('querystring'); ...@@ -7,7 +7,8 @@ var qs = require('querystring');
7 var path = require('path'); 7 var path = require('path');
8 const {google} = require("googleapis"); 8 const {google} = require("googleapis");
9 const service = google.youtube('v3'); 9 const service = google.youtube('v3');
10 -const apiKey = 'AIzaSyCjBrFKnBlGvxsfOD-qJP8nBkdEoqKRHu8'; //api키 10 +const apis = require('./APIs.json');
11 +const apiKey = apis.youtubeAPI; //api키
11 let videoNum = "TpPwI_Lo0YY"; //비디오 주소(예시) 12 let videoNum = "TpPwI_Lo0YY"; //비디오 주소(예시)
12 var videoLang = 'all'; //설정 언어 13 var videoLang = 'all'; //설정 언어
13 const serverIP = "http://localhost:3000" //서버의 주소 14 const serverIP = "http://localhost:3000" //서버의 주소
...@@ -17,29 +18,11 @@ var savednpt = '' ...@@ -17,29 +18,11 @@ var savednpt = ''
17 const URLreg1 = new RegExp(/https?:\/\/youtu.be\//);//유튜브에서 제공하는 동영상 공유 기능을 사용하여 얻은 URL 형식 18 const URLreg1 = new RegExp(/https?:\/\/youtu.be\//);//유튜브에서 제공하는 동영상 공유 기능을 사용하여 얻은 URL 형식
18 const URLreg2 = new RegExp(/https?:\/\/www.youtube.com\//);//유튜브 주소를 그대로 넣었을 때 URL형식 19 const URLreg2 = new RegExp(/https?:\/\/www.youtube.com\//);//유튜브 주소를 그대로 넣었을 때 URL형식
19 20
20 -async function showcomment(response, VideoNum){ 21 +function showcomment(response, VideoNum){
21 - let sepComment = new Promise((resolve, reject)=>{ 22 + let commentDisplay = '';
22 - async function inSepCom(){ 23 + for(let iterArr = 0; iterArr < commentNum; iterArr++){
23 - 24 + commentDisplay += `<br>${commentList[iterArr].name}<br>${commentList[iterArr].text}<br><br>`;
24 - let tempcommentDisplay = ""; 25 + }
25 - console.log(commentNum);
26 -
27 - for(let iterArr = 0; iterArr < commentNum; iterArr++){
28 - await commentList[iterArr].lang.then((languageData) =>{
29 - //console.log(languageData);
30 - if(videoLang == 'all'){
31 - tempcommentDisplay += `<br>${commentList[iterArr].name}<br>${commentList[iterArr].text}<br><br>`;
32 - }
33 - else if(videoLang == languageData){
34 - tempcommentDisplay += `<br>${commentList[iterArr].name}<br>${commentList[iterArr].text}<br><br>`;
35 - }
36 - });
37 - }
38 - return tempcommentDisplay
39 - }
40 - resolve(inSepCom());
41 - });
42 - let commentDisplay = await sepComment;
43 let body = ` 26 let body = `
44 <!doctype html> 27 <!doctype html>
45 <html> 28 <html>
...@@ -100,7 +83,10 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){ ...@@ -100,7 +83,10 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){
100 "maxResults" : 100, 83 "maxResults" : 100,
101 "pageToken" : npt 84 "pageToken" : npt
102 }).then(function(response) { 85 }).then(function(response) {
86 + async function loadAndParse(){
103 //console.log("Response", response); 87 //console.log("Response", response);
88 + tempcommentList = new Array();
89 + tempListLen = 0;
104 for(let iter = 0; iter < response.data.pageInfo.totalResults; iter++){ 90 for(let iter = 0; iter < response.data.pageInfo.totalResults; iter++){
105 let templang = papago.getLang(response.data.items[iter].snippet.topLevelComment.snippet.textDisplay) 91 let templang = papago.getLang(response.data.items[iter].snippet.topLevelComment.snippet.textDisplay)
106 let tempComment = { 92 let tempComment = {
...@@ -109,15 +95,26 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){ ...@@ -109,15 +95,26 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){
109 'text' : response.data.items[iter].snippet.topLevelComment.snippet.textDisplay, 95 'text' : response.data.items[iter].snippet.topLevelComment.snippet.textDisplay,
110 'lang' : templang 96 'lang' : templang
111 } 97 }
112 - commentList.push(tempComment); 98 + tempcommentList.push(tempComment);
113 - commentNum += 1; 99 + tempListLen += 1;
114 - } 100 + }
101 + for(let iter = 0; iter < tempListLen; iter++){
102 + let langPromise = tempcommentList[iter].lang.then(langData=>{
103 + return langData;
104 + });
105 + templang = await langPromise;
106 + if(videoLang == 'all' || videoLang == templang){
107 + commentList.push(tempcommentList[iter]);
108 + commentNum++;
109 + }
110 + }
111 +
115 //console.log(response.data.items[0].snippet.topLevelComment.snippet.textDisplay); 112 //console.log(response.data.items[0].snippet.topLevelComment.snippet.textDisplay);
116 //console.log(response.data.items[1].snippet.topLevelComment.snippet.textDisplay); 113 //console.log(response.data.items[1].snippet.topLevelComment.snippet.textDisplay);
117 npt = response.data.nextPageToken; 114 npt = response.data.nextPageToken;
118 115
119 if(npt != null){ 116 if(npt != null){
120 - if( n > 1 ){ 117 + if( n > 1 && commentNum < 100){
121 loadcomment(ApiKey, VideoNum, npt, n - 1, res); 118 loadcomment(ApiKey, VideoNum, npt, n - 1, res);
122 }else{ 119 }else{
123 savednpt = npt; //만약 댓글을 n번 불러온 후에 댓글이 더 남아있으면 savednpt 갱신 120 savednpt = npt; //만약 댓글을 n번 불러온 후에 댓글이 더 남아있으면 savednpt 갱신
...@@ -128,6 +125,8 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){ ...@@ -128,6 +125,8 @@ function loadcomment(ApiKey, VideoNum, npt, n, res){
128 console.log('end page'); // 댓글의 마지막 페이지 125 console.log('end page'); // 댓글의 마지막 페이지
129 showcomment(res, VideoNum); 126 showcomment(res, VideoNum);
130 } 127 }
128 + }
129 + loadAndParse();
131 }, 130 },
132 function(err) { console.error("Execute error", err); }); 131 function(err) { console.error("Execute error", err); });
133 } 132 }
...@@ -193,7 +192,7 @@ var app = http.createServer(function(request,response){ // request는 브라우 ...@@ -193,7 +192,7 @@ var app = http.createServer(function(request,response){ // request는 브라우
193 console.log(videoNum); 192 console.log(videoNum);
194 let npt = "" 193 let npt = ""
195 if(queryData.nextpage != null) npt = queryData.nextpage 194 if(queryData.nextpage != null) npt = queryData.nextpage
196 - loadcomment(apiKey,videoNum,npt,2, response); 195 + loadcomment(apiKey,videoNum,npt,5, response);
197 } 196 }
198 }); 197 });
199 app.listen(3000); 198 app.listen(3000);
...\ No newline at end of file ...\ No newline at end of file
......
1 -AIzaSyCjBrFKnBlGvxsfOD-qJP8nBkdEoqKRHu8
...\ No newline at end of file ...\ No newline at end of file
1 - 1 +const apis = require('./APIs.json');
2 -var client_id = '6hpmInU0TCrQIiiJwgJX'; 2 +var client_id = apis.papagoClientID;
3 -var client_secret = 'jpYZbkj0_g'; 3 +var client_secret = apis.papagoClientSecret;
4 // var query = "언어를 감지할 문장을 입력하세요."; 4 // var query = "언어를 감지할 문장을 입력하세요.";
5 // app.get('/detectLangs', function (req, res) { 5 // app.get('/detectLangs', function (req, res) {
6 // var api_url = 'https://openapi.naver.com/v1/papago/detectLangs'; 6 // var api_url = 'https://openapi.naver.com/v1/papago/detectLangs';
......