Showing
5 changed files
with
99 additions
and
114 deletions
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, () => { | ... | ... |
video_sad.js
deleted
100644 → 0
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 | -} |
-
Please register or login to post a comment