엄성진

Merge remote-tracking branch 'origin/dev'

1 *.json 1 *.json
2 node_modules/ 2 node_modules/
3 vscode/ 3 vscode/
4 - Info.js 4 + Info.js
...\ No newline at end of file ...\ No newline at end of file
......
1 -// 아래 주석을 참고해 플레이리스트 or 노래의 배열을 직접 만드시면 됩니다.
2 -// 배열을 만들 때, 활용하실 id값이 플레이리스트의 id인지, 특정 노래의 id인지 구별해서 배열을 만드셔야 합니다.
3 -// '플레이리스트'의 id라면 인덱스 500 이하로,
4 -// '특정 노래'의 id라면 인덱스 500 이상으로 넣어주세요!
5 -// 아래 예시를 보고 이해 안되시면, 편하게 카톡으로 말씀해주세요
6 -
7 -
8 -// index < 500 = 플레이리스트
9 -// index > 500 = 개별 곡
10 -
11 // index 100번대 = 장르 플레이리스트 1 // index 100번대 = 장르 플레이리스트
12 // index 200번대 = 무드 플레이리스트 2 // index 200번대 = 무드 플레이리스트
13 // index 300번대 = 가수 플레이리스트 3 // index 300번대 = 가수 플레이리스트
14 -// index 500번대 = 특정 플레이리스트의 노래 10곡
15 4
16 // index 101 = 장르 - 힙합 5 // index 101 = 장르 - 힙합
17 // index 102 = 장르 - 피아노 6 // index 102 = 장르 - 피아노
...@@ -25,8 +14,6 @@ ...@@ -25,8 +14,6 @@
25 // index 303 = 가수 - 레드벨벳 14 // index 303 = 가수 - 레드벨벳
26 // index 304 = 가수 - 트와이스 15 // index 304 = 가수 - 트와이스
27 16
28 -// index 501 = 슬픈노래 10곡
29 -
30 exports.all_ids = []; 17 exports.all_ids = [];
31 18
32 exports.all_ids[101] = 'PLfVO1GXBPp3s03voaFAWN7AkzEnpsGF1U' 19 exports.all_ids[101] = 'PLfVO1GXBPp3s03voaFAWN7AkzEnpsGF1U'
...@@ -39,7 +26,4 @@ exports.all_ids[202] = 'PLfVO1GXBPp3vrR3ZcQFlCEC6oNdo_MQ_R' ...@@ -39,7 +26,4 @@ exports.all_ids[202] = 'PLfVO1GXBPp3vrR3ZcQFlCEC6oNdo_MQ_R'
39 exports.all_ids[301] = 'PLfVO1GXBPp3tgrwk3GDJi3v-E_Hnq3lDO' 26 exports.all_ids[301] = 'PLfVO1GXBPp3tgrwk3GDJi3v-E_Hnq3lDO'
40 exports.all_ids[302] = 'PLfVO1GXBPp3ubihJVPi6HSltRIuvSqSI1' 27 exports.all_ids[302] = 'PLfVO1GXBPp3ubihJVPi6HSltRIuvSqSI1'
41 exports.all_ids[303] = 'PLfVO1GXBPp3u0ckIfYZkADGlSQ6LQoAIQ' 28 exports.all_ids[303] = 'PLfVO1GXBPp3u0ckIfYZkADGlSQ6LQoAIQ'
42 -exports.all_ids[304] = 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK'
43 -
44 -exports.all_ids[501] = ['p5iu1V30myk', 'i-SBnhaZSSU', 'Etfgb6A7hSI', 'IN2mml9xs_s',
45 - 'tp1uoFAfgHE', 'Qx22TnVVIfU', '3y1QIqR115A', 'VXBI1wt8XII', 'aWMBn2--E0Q', 'HyTbgBlnLCo'];
...\ No newline at end of file ...\ No newline at end of file
29 +exports.all_ids[304] = 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK'
...\ No newline at end of file ...\ No newline at end of file
......
This diff is collapsed. Click to expand it.
1 var express = require('express'); 1 var express = require('express');
2 +var Info = require('./Info');
2 const request = require('request'); 3 const request = require('request');
3 const fs = require('fs'); 4 const fs = require('fs');
4 const path = require('path'); 5 const path = require('path');
5 const HTTPS = require('https'); 6 const HTTPS = require('https');
6 -const domain = "2020105631.oss2021.tk"
7 const sslport = 23023; 7 const sslport = 23023;
8 const bodyParser = require('body-parser'); 8 const bodyParser = require('body-parser');
9 -const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'; 9 +const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
10 -// var Info = require('./Info');
11 var app = express(); 10 var app = express();
12 app.use(bodyParser.json()); 11 app.use(bodyParser.json());
13 -<<<<<<< HEAD
14 -
15 -var sad = require('./video_sad');
16 -
17 -=======
18 var songs = require('./check'); 12 var songs = require('./check');
19 ->>>>>>> feature/YouTube_API
20 -
21 -
22 app.post('/hook', function (req, res) { 13 app.post('/hook', function (req, res) {
23 14
24 var eventObj = req.body.events[0]; 15 var eventObj = req.body.events[0];
...@@ -26,10 +17,97 @@ app.post('/hook', function (req, res) { ...@@ -26,10 +17,97 @@ app.post('/hook', function (req, res) {
26 17
27 // request log 18 // request log
28 console.log('======================', new Date(), '======================'); 19 console.log('======================', new Date(), '======================');
29 - send(eventObj.replyToken, message.text); 20 +
30 - res.sendStatus(200); 21 + if (eventObj.type=="message") // 일반 메시지일때
31 -}); 22 + {
32 -function send(replyToken, message) { 23 + react(eventObj.replyToken, message.text,eventObj.source.userId);
24 + }
25 +
26 + else
27 + switch (eventObj.postback.data) {
28 + case "썸네일": //설정에서 썸네일 설정버튼을 눌렀을때
29 + songs.thumbnail_settings(eventObj.replyToken);
30 + break;
31 + case "enablethumbnail": //설정 -> 썸네일 설정 -> 활성화
32 + songs.enablethumbnail(eventObj.replyToken,eventObj.source.userId);
33 + break;
34 + case "unablethumbnail": //설정 -> 썸네일 설정 -> 비활성화
35 + songs.unablethumbnail(eventObj.replyToken,eventObj.source.userId);
36 + break;
37 +
38 + case "개수": //설정에서 전송 개수 설정버튼을 눌렀을때
39 + songs.amount_settings(eventObj.replyToken,eventObj.source.userId);
40 + break;
41 + case "amount1": //설정 -> 전송 개수 -> 1
42 + songs.amount1(eventObj.replyToken,eventObj.source.userId);
43 + break;
44 + case "amount2": //설정 -> 전송 개수 -> 2
45 + songs.amount2(eventObj.replyToken,eventObj.source.userId);
46 + break;
47 + case "amount3": //설정 -> 전송 개수 -> 3
48 + songs.amount3(eventObj.replyToken,eventObj.source.userId);
49 + break;
50 + case "amount4": //설정 -> 전송 개수 -> 4
51 + songs.amount4(eventObj.replyToken,eventObj.source.userId);
52 + break;
53 +
54 + case "주소": //설정에서 유튜브 주소 설정버튼을 눌렀을때
55 + songs.address_settings(eventObj.replyToken);
56 + break;
57 + case "enableaddress": //설정 -> 주소 설정 -> 활성화
58 + songs.enableaddress(eventObj.replyToken,eventObj.source.userId);
59 + break;
60 + case "unableaddress": //설정 -> 주소 설정 -> 비활성화
61 + songs.unableaddress(eventObj.replyToken,eventObj.source.userId);
62 + break;
63 +
64 +
65 + case "genre": // 플레이리스트 -> 장르
66 + songs.genre(eventObj.replyToken);
67 + break;
68 +
69 + case "hiphop": // 플레이리스트 -> 장르 -> 힙합
70 + songs.hiphop(eventObj.replyToken,eventObj.source.userId);
71 + break;
72 + case "piano": // 플레이리스트 -> 장르 -> 피아노
73 + songs.piano(eventObj.replyToken,eventObj.source.userId);
74 + break;
75 + case "pop": // 플레이리스트 -> 장르 -> 팝
76 + songs.pop(eventObj.replyToken,eventObj.source.userId);
77 + break;
78 +
79 + case "mood": // 플레이리스트 -> 무드
80 + songs.mood(eventObj.replyToken);
81 + break;
82 +
83 + case "exciting": // 플레이리스트 -> 무드 -> 신남
84 + songs.exciting(eventObj.replyToken,eventObj.source.userId);
85 + break;
86 + case "sad": // 플레이리스트 -> 무드 -> 슬픔
87 + songs.sad(eventObj.replyToken,eventObj.source.userId);
88 + break;
89 +
90 + case "singer": // 플레이리스트 -> 가수
91 + songs.singer(eventObj.replyToken);
92 + break;
93 +
94 + case "blackpink": // 플레이리스트 -> 가수 -> 블랙핑크
95 + songs.blackpink(eventObj.replyToken,eventObj.source.userId);
96 + break;
97 + case "iu": // 플레이리스트 -> 가수 -> 아이유
98 + songs.iu(eventObj.replyToken,eventObj.source.userId);
99 + break;
100 + case "redvelvet": // 플레이리스트 -> 가수 -> 레드벨벳
101 + songs.redvelvet(eventObj.replyToken,eventObj.source.userId);
102 + break;
103 + case "twice": // 플레이리스트 -> 가수 -> 트와이스
104 + songs.twice(eventObj.replyToken,eventObj.source.userId);
105 + break;
106 + }
107 + res.sendStatus(200);
108 + }
109 +);
110 +function react(replyToken, message,userId) {
33 111
34 request.post( 112 request.post(
35 { 113 {
...@@ -37,16 +115,15 @@ function send(replyToken, message) { ...@@ -37,16 +115,15 @@ function send(replyToken, message) {
37 }, 115 },
38 116
39 function () { 117 function () {
40 - songs.check(message, replyToken); 118 + songs.check(message, replyToken,userId);
41 -
42 } 119 }
43 ); 120 );
44 } 121 }
45 try { 122 try {
46 const option = { 123 const option = {
47 - ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'), 124 + ca: fs.readFileSync('/etc/letsencrypt/live/' + Info.domain + '/fullchain.pem'),
48 - key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(), 125 + key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.domain + '/privkey.pem'), 'utf8').toString(),
49 - cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(), 126 + cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.domain + '/cert.pem'), 'utf8').toString(),
50 }; 127 };
51 128
52 HTTPS.createServer(option, app).listen(sslport, () => { 129 HTTPS.createServer(option, app).listen(sslport, () => {
......
1 -var Info = require('./Info');
2 -
3 -exports.check = function(message,replyToken){
4 -
5 - const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성
6 - var ids = ['p5iu1V30myk', 'i-SBnhaZSSU', 'Etfgb6A7hSI', 'IN2mml9xs_s', // 모든 동영상 id를 관리하는 배열
7 - 'tp1uoFAfgHE', 'Qx22TnVVIfU', '3y1QIqR115A', 'VXBI1wt8XII', 'aWMBn2--E0Q', 'HyTbgBlnLCo'];
8 -
9 - const request = require('request');
10 - const fs = require('fs');
11 - const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
12 -
13 -
14 - var { google } = require('googleapis');
15 -
16 - var service = google.youtube('v3');
17 - service.videos.list
18 - (
19 - {
20 - key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
21 - part: 'snippet',
22 - id: ids[rand_0to9], // 동영상 Id random input
23 - fields: 'items(snippet(title))'
24 - },
25 - function (err, response)
26 - {
27 - if (err)
28 - {
29 - console.log('The API returned an error: ', err);
30 - return;
31 - }
32 -
33 - var video = response.data.items;
34 -
35 - if (video.length == 0)
36 - {
37 - console.log('검색된 동영상이 없습니다.');
38 - }
39 - else
40 - {
41 - sendMessage = JSON.stringify(response.data.items[0].snippet.title);
42 - console.log(sendMessage);
43 - request.post(
44 - {
45 - url: TARGET_URL,
46 - headers:
47 - {
48 - 'Authorization': `Bearer ${Info.TOKEN}`
49 - },
50 - json:
51 - {
52 - "replyToken": replyToken,
53 - "messages":
54 - [
55 - {
56 - "type": "image",
57 - "originalContentUrl": "https://img.youtube.com/vi/"+ids[rand_0to9]+"/hqdefault.jpg",
58 - "previewImageUrl": "https://img.youtube.com/vi/"+ids[rand_0to9]+"/hqdefault.jpg"
59 - },
60 - {
61 - "type": "text",
62 - "text": sendMessage
63 - }
64 - ]
65 - }
66 - }
67 - );
68 - }
69 - }
70 - )
71 -
72 -
73 -
74 -
75 -
76 -}