Showing
5 changed files
with
905 additions
and
216 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' |
... | @@ -40,6 +27,3 @@ exports.all_ids[301] = 'PLfVO1GXBPp3tgrwk3GDJi3v-E_Hnq3lDO' | ... | @@ -40,6 +27,3 @@ 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' | 29 | exports.all_ids[304] = 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK' |
... | \ No newline at end of file | ... | \ No newline at end of file |
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 | ... | ... |
... | @@ -6,90 +6,110 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' | ... | @@ -6,90 +6,110 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' |
6 | var { google } = require('googleapis'); | 6 | var { google } = require('googleapis'); |
7 | var service = google.youtube('v3'); | 7 | var service = google.youtube('v3'); |
8 | 8 | ||
9 | +//세팅,설정값 | ||
10 | +var setting_userId = []; //유저아이디보관 | ||
11 | +var setting_Thumbnail = []; // 1:썸네일 출력(기본값) / 0:미출력 | ||
12 | +var setting_SendAmount = []; // 보낼 양 (1이상, 4이하의 정수) (기본값:1) | ||
13 | +var setting_SendAddress = []; // 1:유튜브 주소 출력(기본값) / 0:미출력 | ||
9 | 14 | ||
10 | -exports.check = function (message, replyToken) { | 15 | +function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색해서 나온 내용 전송하는 함수 |
16 | +{ | ||
11 | 17 | ||
12 | - const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성 | 18 | + sendMessage = ""; |
13 | - | 19 | + var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; |
14 | - var choice; | 20 | + for (var i = 0; i < SendAmount; i++) { |
15 | - var choose; | ||
16 | - | ||
17 | - switch (message) { | ||
18 | - case "슬픈 노래": | ||
19 | - choose = 501; | ||
20 | - choice = ids.all_ids[choose][rand_0to9] | ||
21 | - break; | ||
22 | - case "힙합 플레이리스트": | ||
23 | - choose = 101; | ||
24 | - choice = ids.all_ids[choose] | ||
25 | - break; | ||
26 | - case "피아노 플레이리스트": | ||
27 | - choose = 102; | ||
28 | - choice = ids.all_ids[choose] | ||
29 | - break; | ||
30 | - case "팝 플레이리스트": | ||
31 | - choose = 103; | ||
32 | - choice = ids.all_ids[choose] | ||
33 | - break; | ||
34 | - case "신나는 플레이리스트": | ||
35 | - choose = 201; | ||
36 | - choice = ids.all_ids[choose] | ||
37 | - break; | ||
38 | - case "슬픈 플레이리스트": | ||
39 | - choose = 202; | ||
40 | - choice = ids.all_ids[choose] | ||
41 | - break; | ||
42 | - case "블랙핑크 플레이리스트": | ||
43 | - choose = 301; | ||
44 | - choice = ids.all_ids[choose] | ||
45 | - break; | ||
46 | - case "아이유 플레이리스트": | ||
47 | - choose = 302; | ||
48 | - choice = ids.all_ids[choose] | ||
49 | - break; | ||
50 | - case "레드벨벳 플레이리스트": | ||
51 | - choose = 303; | ||
52 | - choice = ids.all_ids[choose] | ||
53 | - break; | ||
54 | - case "트와이스 플레이리스트": | ||
55 | - choose = 304; | ||
56 | - choice = ids.all_ids[choose] | ||
57 | - break; | ||
58 | 21 | ||
59 | - // 아래는 case 추가를 위한 템플릿 | 22 | + temp_title[i] = title[i]; |
60 | - // case "": | ||
61 | - // choose = ; | ||
62 | - // choice = ids.all_ids[choose] | ||
63 | 23 | ||
64 | - default: | 24 | + temp_url2[i] = url2[i]; |
65 | - console.log("잘못 입력했어요~ 다시 입력하세요"); | 25 | + if (sendaddress) //주소 전송 활성화 |
66 | - choice = -1; | 26 | + temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, "")); |
27 | + else | ||
28 | + temp_url[i] = ""; | ||
29 | + sendMessage += temp_title[i] + "\n" + | ||
30 | + temp_url[i] + "\n" + "\n"; | ||
67 | } | 31 | } |
68 | 32 | ||
69 | - if (choose > 500) { | 33 | + console.log(sendMessage); |
70 | - | 34 | + if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌. |
71 | - service.videos.list | 35 | + request.post( |
72 | - ( | ||
73 | { | 36 | { |
74 | - key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518', | 37 | + url: TARGET_URL, |
75 | - part: 'snippet', | 38 | + headers: |
76 | - id: choice, | 39 | + { |
77 | - fields: 'items(snippet(title))' | 40 | + 'Authorization': `Bearer ${Info.TOKEN}` |
78 | }, | 41 | }, |
79 | - function (err, response) { | 42 | + json: |
80 | - if (err) { | 43 | + { |
81 | - console.log('The API returned an error: ', err); | 44 | + "replyToken": replyToken, |
82 | - return; | 45 | + "messages": |
46 | + [ | ||
47 | + { | ||
48 | + "type": "image", | ||
49 | + "originalContentUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg", | ||
50 | + "previewImageUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg" | ||
51 | + }, | ||
52 | + { | ||
53 | + "type": "text", | ||
54 | + "text": sendMessage | ||
55 | + } | ||
56 | + ] | ||
57 | + } | ||
58 | + } | ||
59 | + ); | ||
60 | + else //썸네일 비활성화 | ||
61 | + request.post( | ||
62 | + { | ||
63 | + url: TARGET_URL, | ||
64 | + headers: | ||
65 | + { | ||
66 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
67 | + }, | ||
68 | + json: | ||
69 | + { | ||
70 | + "replyToken": replyToken, | ||
71 | + "messages": | ||
72 | + [ | ||
73 | + { | ||
74 | + "type": "text", | ||
75 | + "text": sendMessage | ||
76 | + } | ||
77 | + ] | ||
83 | } | 78 | } |
79 | + } | ||
80 | + ); | ||
81 | +} | ||
84 | 82 | ||
85 | - var video = response.data.items; | 83 | +function shuffle(array) { //플레이리스트에서 랜덤으로 골라서 출력할 수 있도록 shuffle 함수를 추가함 |
84 | + for (let i = array.length - 1; i > 0; i--) { | ||
85 | + let j = Math.floor(Math.random() * (i + 1)); | ||
86 | + [array[i], array[j]] = [array[j], array[i]]; | ||
87 | + } | ||
88 | +} | ||
86 | 89 | ||
87 | - if (video.length == 0) { | 90 | +function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)//플레이리스트에서 나온 내용 전송하는 함수 |
88 | - console.log('검색된 동영상이 없습니다.'); | 91 | +{ |
92 | + var random_order=[0,1,2,3,4,5,6,7,8,9]; | ||
93 | + shuffle(random_order) | ||
94 | + | ||
95 | + sendMessage = ""; | ||
96 | + var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; | ||
97 | + for (var i = 0; i < SendAmount; i++) { | ||
98 | + | ||
99 | + temp_title[i] = JSON.stringify(response.data.items[random_order[i]].snippet.title).replace(/\"/gi, ""); | ||
100 | + | ||
101 | + temp_url2[i] = JSON.stringify(response.data.items[random_order[i]].snippet.resourceId.videoId); | ||
102 | + if (sendaddress) //주소 활성화 | ||
103 | + temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, "")); | ||
104 | + else | ||
105 | + temp_url[i] = ""; | ||
106 | + sendMessage += temp_title[i] + "\n" + | ||
107 | + temp_url[i] + "\n" + "\n"; | ||
89 | } | 108 | } |
90 | - else { | 109 | + |
91 | - sendMessage = JSON.stringify(response.data.items[0].snippet.title); | 110 | + |
92 | console.log(sendMessage); | 111 | console.log(sendMessage); |
112 | + if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌. | ||
93 | request.post( | 113 | request.post( |
94 | { | 114 | { |
95 | url: TARGET_URL, | 115 | url: TARGET_URL, |
... | @@ -104,8 +124,8 @@ exports.check = function (message, replyToken) { | ... | @@ -104,8 +124,8 @@ exports.check = function (message, replyToken) { |
104 | [ | 124 | [ |
105 | { | 125 | { |
106 | "type": "image", | 126 | "type": "image", |
107 | - "originalContentUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg", | 127 | + "originalContentUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg", |
108 | - "previewImageUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg" | 128 | + "previewImageUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg" |
109 | }, | 129 | }, |
110 | { | 130 | { |
111 | "type": "text", | 131 | "type": "text", |
... | @@ -115,15 +135,32 @@ exports.check = function (message, replyToken) { | ... | @@ -115,15 +135,32 @@ exports.check = function (message, replyToken) { |
115 | } | 135 | } |
116 | } | 136 | } |
117 | ); | 137 | ); |
138 | + else //썸네일 비활성화 | ||
139 | + request.post( | ||
140 | + { | ||
141 | + url: TARGET_URL, | ||
142 | + headers: | ||
143 | + { | ||
144 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
145 | + }, | ||
146 | + json: | ||
147 | + { | ||
148 | + "replyToken": replyToken, | ||
149 | + "messages": | ||
150 | + [ | ||
151 | + { | ||
152 | + "type": "text", | ||
153 | + "text": sendMessage | ||
118 | } | 154 | } |
155 | + ] | ||
119 | } | 156 | } |
120 | - | ||
121 | - ) | ||
122 | } | 157 | } |
158 | + ); | ||
159 | +} | ||
123 | 160 | ||
124 | - else { | 161 | +function HELP(replyToken,sendMessage) //도움말 함수 |
125 | - if (choice == -1) { | 162 | +{ |
126 | - sendMessage = "잘못 입력했어요~ 다시 입력하세요"; | 163 | + console.log(sendMessage); |
127 | request.post( | 164 | request.post( |
128 | { | 165 | { |
129 | url: TARGET_URL, | 166 | url: TARGET_URL, |
... | @@ -144,40 +181,131 @@ exports.check = function (message, replyToken) { | ... | @@ -144,40 +181,131 @@ exports.check = function (message, replyToken) { |
144 | } | 181 | } |
145 | } | 182 | } |
146 | ); | 183 | ); |
184 | +} | ||
185 | + | ||
186 | +function SETTINGS(replyToken) //설정 함수 | ||
187 | +{ | ||
188 | + console.log("설정 메뉴 진입"); | ||
189 | + request.post( | ||
190 | + { | ||
191 | + url: TARGET_URL, | ||
192 | + headers: | ||
193 | + { | ||
194 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
195 | + }, | ||
196 | + json: | ||
197 | + { | ||
198 | + "replyToken": replyToken, | ||
199 | + "messages": | ||
200 | + [ | ||
201 | + { | ||
202 | + "type": "template", | ||
203 | + "altText": "설정메뉴입니다.", | ||
204 | + "template": { | ||
205 | + "type": "buttons", | ||
206 | + "title": "설정", | ||
207 | + "text": "설정하려는 항목을 골라주세요.", | ||
208 | + "actions": [ | ||
209 | + { | ||
210 | + "type": "postback", | ||
211 | + "label": "썸네일 전송 여부 변경", | ||
212 | + "data": "썸네일" | ||
213 | + }, | ||
214 | + { | ||
215 | + "type": "postback", | ||
216 | + "label": "추천 음악 개수 조정", | ||
217 | + "data": "개수" | ||
218 | + }, | ||
219 | + { | ||
220 | + "type": "postback", | ||
221 | + "label": "유튜브 주소 전송 여부 변경", | ||
222 | + "data": "주소" | ||
223 | + } | ||
224 | + ] | ||
225 | + } | ||
226 | + } | ||
227 | + ] | ||
228 | + } | ||
147 | } | 229 | } |
148 | - else { | 230 | + ); |
149 | - service.playlistItems.list({ | 231 | +} |
150 | - key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518', | 232 | + |
233 | +function sendplaylist(replyToken, userId, choose) | ||
234 | +{ | ||
235 | + var choice=ids.all_ids[choose]; | ||
236 | + service.playlistItems.list( | ||
237 | + { | ||
238 | + key: Info.YoutubeKey, | ||
151 | part: 'snippet', | 239 | part: 'snippet', |
152 | fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보. | 240 | fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보. |
153 | maxResults: 10, | 241 | maxResults: 10, |
154 | playlistId: choice | 242 | playlistId: choice |
155 | - }, function (err, response) { | 243 | + }, function (err, response){ |
156 | if (err) { | 244 | if (err) { |
157 | console.log('The API returned an error: ', err); | 245 | console.log('The API returned an error: ', err); |
158 | return; | 246 | return; |
159 | } | 247 | } |
160 | - | ||
161 | var video = response.data.items; | 248 | var video = response.data.items; |
162 | - if (video.length == 0) { | 249 | + if (video.length == 0) |
163 | console.log('검색된 동영상이 없습니다.'); | 250 | console.log('검색된 동영상이 없습니다.'); |
164 | - } else { | 251 | + else |
165 | - sendMessage = ""; | 252 | + SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]); |
166 | - var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; | 253 | + } |
167 | - for (var i = 0; i < 10; i++) { | 254 | + ) |
168 | 255 | ||
169 | - temp_title[i] = JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""); | 256 | +} |
170 | 257 | ||
171 | - temp_url2[i] = JSON.stringify(response.data.items[i].snippet.resourceId.videoId); | ||
172 | - temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, "")); | ||
173 | 258 | ||
174 | - //temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg"; | 259 | +function PLAYLIST(replyToken) //플레이리스트 함수 |
175 | - // 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌. | 260 | +{ |
261 | + console.log("플레이리스트 선택창 진입"); | ||
262 | + request.post( | ||
263 | + { | ||
264 | + url: TARGET_URL, | ||
265 | + headers: | ||
266 | + { | ||
267 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
268 | + }, | ||
269 | + json: | ||
270 | + { | ||
271 | + "replyToken": replyToken, | ||
272 | + "messages": | ||
273 | + [ | ||
274 | + { | ||
275 | + "type": "template", | ||
276 | + "altText": "플레이리스트 선택창 입니다.", | ||
277 | + "template": { | ||
278 | + "type": "buttons", | ||
279 | + "title": "분야", | ||
280 | + "text": "원하시는 분야를 골라주세요.", | ||
281 | + "actions": [ | ||
282 | + { | ||
283 | + "type": "postback", | ||
284 | + "label": "장르", | ||
285 | + "data": "genre" | ||
286 | + }, | ||
287 | + { | ||
288 | + "type": "postback", | ||
289 | + "label": "무드", | ||
290 | + "data": "mood" | ||
291 | + }, | ||
292 | + { | ||
293 | + "type": "postback", | ||
294 | + "label": "가수", | ||
295 | + "data": "singer" | ||
296 | + } | ||
297 | + ] | ||
298 | + } | ||
299 | + } | ||
300 | + ] | ||
301 | + } | ||
302 | + } | ||
303 | + ); | ||
304 | +} | ||
176 | 305 | ||
177 | - sendMessage += temp_title[i] + "\n" + | 306 | +exports.genre = function (replyToken) |
178 | - temp_url[i] + "\n" + "\n"; | 307 | +{ |
179 | - // temp_thumpnail[i] + "\n" + "\n"; | 308 | + console.log("플레이리스트-장르"); |
180 | - } console.log(sendMessage); | ||
181 | request.post( | 309 | request.post( |
182 | { | 310 | { |
183 | url: TARGET_URL, | 311 | url: TARGET_URL, |
... | @@ -190,25 +318,601 @@ exports.check = function (message, replyToken) { | ... | @@ -190,25 +318,601 @@ exports.check = function (message, replyToken) { |
190 | "replyToken": replyToken, | 318 | "replyToken": replyToken, |
191 | "messages": | 319 | "messages": |
192 | [ | 320 | [ |
193 | - // { | ||
194 | - // "type": "image", | ||
195 | - // "originalContentUrl": temp_thumpnail[0], | ||
196 | - // "previewImageUrl": temp_thumpnail[0] | ||
197 | - // }, | ||
198 | { | 321 | { |
199 | - "type": "text", | 322 | + "type": "template", |
200 | - "text": sendMessage | 323 | + "altText": "장르 선택창 입니다.", |
324 | + "template": { | ||
325 | + "type": "buttons", | ||
326 | + "title": "장르", | ||
327 | + "text": "원하시는 장르를 골라주세요.", | ||
328 | + "actions": [ | ||
329 | + { | ||
330 | + "type": "postback", | ||
331 | + "label": "힙합", | ||
332 | + "data": "hiphop" | ||
333 | + }, | ||
334 | + { | ||
335 | + "type": "postback", | ||
336 | + "label": "피아노", | ||
337 | + "data": "piano" | ||
338 | + }, | ||
339 | + { | ||
340 | + "type": "postback", | ||
341 | + "label": "팝", | ||
342 | + "data": "pop" | ||
343 | + } | ||
344 | + ] | ||
345 | + } | ||
346 | + } | ||
347 | + ] | ||
348 | + } | ||
349 | + } | ||
350 | + ); | ||
351 | +} | ||
352 | + | ||
353 | +exports.hiphop = function(replyToken,userId) | ||
354 | +{ | ||
355 | + console.log('플레이리스트-장르-힙합'); | ||
356 | + sendplaylist(replyToken, userId, 101); | ||
357 | +} | ||
358 | + | ||
359 | +exports.piano = function(replyToken,userId) | ||
360 | +{ | ||
361 | + console.log('플레이리스트-장르-피아노'); | ||
362 | + sendplaylist(replyToken, userId, 102); | ||
363 | +} | ||
364 | + | ||
365 | +exports.pop = function(replyToken,userId) | ||
366 | +{ | ||
367 | + console.log('플레이리스트-장르-팝'); | ||
368 | + sendplaylist(replyToken, userId, 103); | ||
369 | +} | ||
370 | + | ||
371 | +exports.mood = function (replyToken) | ||
372 | +{ | ||
373 | + console.log("플레이리스트-무드"); | ||
374 | + request.post( | ||
375 | + { | ||
376 | + url: TARGET_URL, | ||
377 | + headers: | ||
378 | + { | ||
379 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
380 | + }, | ||
381 | + json: | ||
382 | + { | ||
383 | + "replyToken": replyToken, | ||
384 | + "messages": | ||
385 | + [ | ||
386 | + { | ||
387 | + "type": "template", | ||
388 | + "altText": "무드 선택창 입니다.", | ||
389 | + "template": { | ||
390 | + "type": "buttons", | ||
391 | + "title": "무드", | ||
392 | + "text": "원하시는 무드를 골라주세요.", | ||
393 | + "actions": [ | ||
394 | + { | ||
395 | + "type": "postback", | ||
396 | + "label": "신남", | ||
397 | + "data": "exciting" | ||
398 | + }, | ||
399 | + { | ||
400 | + "type": "postback", | ||
401 | + "label": "슬픔", | ||
402 | + "data": "sad" | ||
403 | + } | ||
404 | + ] | ||
405 | + } | ||
201 | } | 406 | } |
202 | ] | 407 | ] |
203 | } | 408 | } |
204 | } | 409 | } |
205 | ); | 410 | ); |
411 | +} | ||
412 | + | ||
413 | +exports.exciting = function(replyToken,userId) | ||
414 | +{ | ||
415 | + console.log('플레이리스트-무드-신남'); | ||
416 | + sendplaylist(replyToken, userId, 201); | ||
417 | +} | ||
418 | + | ||
419 | +exports.sad = function(replyToken,userId) | ||
420 | +{ | ||
421 | + console.log('플레이리스트-무드-슬픔'); | ||
422 | + sendplaylist(replyToken, userId, 202); | ||
423 | +} | ||
424 | + | ||
425 | +exports.singer = function (replyToken) | ||
426 | +{ | ||
427 | + console.log("플레이리스트-가수"); | ||
428 | + request.post( | ||
429 | + { | ||
430 | + url: TARGET_URL, | ||
431 | + headers: | ||
432 | + { | ||
433 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
434 | + }, | ||
435 | + json: | ||
436 | + { | ||
437 | + "replyToken": replyToken, | ||
438 | + "messages": | ||
439 | + [ | ||
440 | + { | ||
441 | + "type": "template", | ||
442 | + "altText": "가수 선택창 입니다.", | ||
443 | + "template": { | ||
444 | + "type": "buttons", | ||
445 | + "title": "가수", | ||
446 | + "text": "원하시는 가수를 골라주세요.", | ||
447 | + "actions": [ | ||
448 | + { | ||
449 | + "type": "postback", | ||
450 | + "label": "블랙핑크", | ||
451 | + "data": "blackpink" | ||
452 | + }, | ||
453 | + { | ||
454 | + "type": "postback", | ||
455 | + "label": "아이유", | ||
456 | + "data": "iu" | ||
206 | } | 457 | } |
207 | - }) | 458 | + , |
459 | + { | ||
460 | + "type": "postback", | ||
461 | + "label": "레드벨벳", | ||
462 | + "data": "redvelvet" | ||
463 | + } | ||
464 | + , | ||
465 | + { | ||
466 | + "type": "postback", | ||
467 | + "label": "트와이스", | ||
468 | + "data": "twice" | ||
469 | + } | ||
470 | + ] | ||
471 | + } | ||
472 | + } | ||
473 | + ] | ||
208 | } | 474 | } |
209 | } | 475 | } |
476 | + ); | ||
477 | +} | ||
478 | + | ||
479 | +exports.blackpink = function(replyToken,userId) | ||
480 | +{ | ||
481 | + console.log('플레이리스트-가수-블랙핑크'); | ||
482 | + sendplaylist(replyToken, userId, 301); | ||
483 | +} | ||
484 | + | ||
485 | +exports.iu = function(replyToken,userId) | ||
486 | +{ | ||
487 | + console.log('플레이리스트-가수-아이유'); | ||
488 | + sendplaylist(replyToken, userId, 302); | ||
489 | +} | ||
490 | + | ||
491 | +exports.redvelvet = function(replyToken,userId) | ||
492 | +{ | ||
493 | + console.log('플레이리스트-가수-레드벨벳'); | ||
494 | + sendplaylist(replyToken, userId, 303); | ||
495 | +} | ||
210 | 496 | ||
497 | +exports.twice = function(replyToken,userId) | ||
498 | +{ | ||
499 | + console.log('플레이리스트-가수-트와이스'); | ||
500 | + sendplaylist(replyToken, userId, 304); | ||
501 | +} | ||
211 | 502 | ||
212 | 503 | ||
504 | +exports.thumbnail_settings = function (replyToken) | ||
505 | +{ | ||
213 | 506 | ||
507 | + console.log('썸네일 전송 설정'); | ||
508 | + request.post( | ||
509 | + { | ||
510 | + url: TARGET_URL, | ||
511 | + headers: | ||
512 | + { | ||
513 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
514 | + }, | ||
515 | + json: | ||
516 | + { | ||
517 | + "replyToken": replyToken, | ||
518 | + "messages": | ||
519 | + [ | ||
520 | + { | ||
521 | + "type": "template", | ||
522 | + "altText": "설정메뉴입니다.", | ||
523 | + "template": { | ||
524 | + "type": "buttons", | ||
525 | + "title": "썸네일 전송 여부 변경", | ||
526 | + "text": "아래 항목을 골라주세요.", | ||
527 | + "actions": [ | ||
528 | + { | ||
529 | + "type": "postback", | ||
530 | + "label": "썸네일 전송 O", | ||
531 | + "data": "enablethumbnail" | ||
532 | + }, | ||
533 | + { | ||
534 | + "type": "postback", | ||
535 | + "label": "썸네일 전송 X", | ||
536 | + "data": "unablethumbnail" | ||
537 | + }, | ||
538 | + ] | ||
539 | + } | ||
540 | + } | ||
541 | + ] | ||
542 | + } | ||
543 | + } | ||
544 | + | ||
545 | + ); | ||
546 | +} | ||
547 | + | ||
548 | +exports.enablethumbnail = function(replyToken,userId) | ||
549 | +{ | ||
550 | + console.log('썸네일 활성화 됨.'); | ||
551 | + setting_Thumbnail[setting_userId.indexOf(userId)]=1; | ||
552 | + request.post( | ||
553 | + { | ||
554 | + url: TARGET_URL, | ||
555 | + headers: | ||
556 | + { | ||
557 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
558 | + }, | ||
559 | + json: | ||
560 | + { | ||
561 | + "replyToken": replyToken, | ||
562 | + "messages": | ||
563 | + [ | ||
564 | + { | ||
565 | + "type": "text", | ||
566 | + "text": "이제 썸네일이 전송됩니다!" | ||
567 | + } | ||
568 | + ] | ||
569 | + } | ||
570 | + } | ||
571 | + ); | ||
572 | +} | ||
573 | +exports.unablethumbnail = function(replyToken,userId) | ||
574 | +{ | ||
575 | + console.log('썸네일 비활성화 됨.'); | ||
576 | + setting_Thumbnail[setting_userId.indexOf(userId)]=0; | ||
577 | + request.post( | ||
578 | + { | ||
579 | + url: TARGET_URL, | ||
580 | + headers: | ||
581 | + { | ||
582 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
583 | + }, | ||
584 | + json: | ||
585 | + { | ||
586 | + "replyToken": replyToken, | ||
587 | + "messages": | ||
588 | + [ | ||
589 | + { | ||
590 | + "type": "text", | ||
591 | + "text": "이제 썸네일이 전송되지 않습니다!" | ||
592 | + } | ||
593 | + ] | ||
594 | + } | ||
595 | + } | ||
596 | + ); | ||
597 | +} | ||
598 | + | ||
599 | + | ||
600 | + | ||
601 | + | ||
602 | + | ||
603 | + | ||
604 | + | ||
605 | +exports.amount_settings = function (replyToken, userId) | ||
606 | +{ | ||
607 | + console.log('출력량 설정'); | ||
608 | + request.post( | ||
609 | + { | ||
610 | + url: TARGET_URL, | ||
611 | + headers: | ||
612 | + { | ||
613 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
614 | + }, | ||
615 | + json: | ||
616 | + { | ||
617 | + "replyToken": replyToken, | ||
618 | + "messages": | ||
619 | + [ | ||
620 | + { | ||
621 | + "type": "template", | ||
622 | + "altText": "설정메뉴입니다.", | ||
623 | + "template": { | ||
624 | + "type": "buttons", | ||
625 | + "title": "추천 음악 개수 조정", | ||
626 | + "text": "원하는 추천 개수를 골라주세요.", | ||
627 | + "actions": [ | ||
628 | + { | ||
629 | + "type": "postback", | ||
630 | + "label": "1개", | ||
631 | + "data": "amount1" | ||
632 | + }, | ||
633 | + { | ||
634 | + "type": "postback", | ||
635 | + "label": "2개", | ||
636 | + "data": "amount2" | ||
637 | + }, | ||
638 | + { | ||
639 | + "type": "postback", | ||
640 | + "label": "3개", | ||
641 | + "data": "amount3" | ||
642 | + }, | ||
643 | + { | ||
644 | + "type": "postback", | ||
645 | + "label": "4개", | ||
646 | + "data": "amount4" | ||
647 | + } | ||
648 | + ] | ||
649 | + } | ||
650 | + } | ||
651 | + ] | ||
652 | + } | ||
653 | + } | ||
654 | + | ||
655 | + ); | ||
656 | +} | ||
657 | + | ||
658 | +exports.amount1 = function(replyToken,userId) | ||
659 | +{ | ||
660 | + console.log('한 번에 1개씩'); | ||
661 | + setting_SendAmount[setting_userId.indexOf(userId)]=1; | ||
662 | + request.post( | ||
663 | + { | ||
664 | + url: TARGET_URL, | ||
665 | + headers: | ||
666 | + { | ||
667 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
668 | + }, | ||
669 | + json: | ||
670 | + { | ||
671 | + "replyToken": replyToken, | ||
672 | + "messages": | ||
673 | + [ | ||
674 | + { | ||
675 | + "type": "text", | ||
676 | + "text": "이제 한 번에 한 개씩 추천합니다!" | ||
677 | + } | ||
678 | + ] | ||
679 | + } | ||
680 | + } | ||
681 | + ); | ||
682 | +} | ||
683 | + | ||
684 | +exports.amount2 = function(replyToken,userId) | ||
685 | +{ | ||
686 | + console.log('한 번에 2개씩'); | ||
687 | + setting_SendAmount[setting_userId.indexOf(userId)]=2; | ||
688 | + request.post( | ||
689 | + { | ||
690 | + url: TARGET_URL, | ||
691 | + headers: | ||
692 | + { | ||
693 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
694 | + }, | ||
695 | + json: | ||
696 | + { | ||
697 | + "replyToken": replyToken, | ||
698 | + "messages": | ||
699 | + [ | ||
700 | + { | ||
701 | + "type": "text", | ||
702 | + "text": "이제 한 번에 두 개씩 추천합니다!" | ||
703 | + } | ||
704 | + ] | ||
705 | + } | ||
706 | + } | ||
707 | + ); | ||
708 | +} | ||
709 | + | ||
710 | +exports.amount3 = function(replyToken,userId) | ||
711 | +{ | ||
712 | + console.log('한 번에 3개씩'); | ||
713 | + setting_SendAmount[setting_userId.indexOf(userId)]=3; | ||
714 | + request.post( | ||
715 | + { | ||
716 | + url: TARGET_URL, | ||
717 | + headers: | ||
718 | + { | ||
719 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
720 | + }, | ||
721 | + json: | ||
722 | + { | ||
723 | + "replyToken": replyToken, | ||
724 | + "messages": | ||
725 | + [ | ||
726 | + { | ||
727 | + "type": "text", | ||
728 | + "text": "이제 한 번에 세 개씩 추천합니다!" | ||
729 | + } | ||
730 | + ] | ||
731 | + } | ||
732 | + } | ||
733 | + ); | ||
734 | +} | ||
735 | + | ||
736 | +exports.amount4 = function(replyToken,userId) | ||
737 | +{ | ||
738 | + console.log('한 번에 4개씩'); | ||
739 | + setting_SendAmount[setting_userId.indexOf(userId)]=4; | ||
740 | + request.post( | ||
741 | + { | ||
742 | + url: TARGET_URL, | ||
743 | + headers: | ||
744 | + { | ||
745 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
746 | + }, | ||
747 | + json: | ||
748 | + { | ||
749 | + "replyToken": replyToken, | ||
750 | + "messages": | ||
751 | + [ | ||
752 | + { | ||
753 | + "type": "text", | ||
754 | + "text": "이제 한 번에 네 개씩 추천합니다!" | ||
755 | + } | ||
756 | + ] | ||
757 | + } | ||
758 | + } | ||
759 | + ); | ||
760 | +} | ||
761 | + | ||
762 | + | ||
763 | + | ||
764 | + | ||
765 | +exports.address_settings = function (replyToken) | ||
766 | +{ | ||
767 | + console.log('유튜브 주소 전송 설정'); | ||
768 | + request.post( | ||
769 | + { | ||
770 | + url: TARGET_URL, | ||
771 | + headers: | ||
772 | + { | ||
773 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
774 | + }, | ||
775 | + json: | ||
776 | + { | ||
777 | + "replyToken": replyToken, | ||
778 | + "messages": | ||
779 | + [ | ||
780 | + { | ||
781 | + "type": "template", | ||
782 | + "altText": "설정메뉴입니다.", | ||
783 | + "template": { | ||
784 | + "type": "buttons", | ||
785 | + "title": "유튜브 주소 전송 여부 변경", | ||
786 | + "text": "아래 항목을 골라주세요.", | ||
787 | + "actions": [ | ||
788 | + { | ||
789 | + "type": "postback", | ||
790 | + "label": "유튜브 주소 전송 O", | ||
791 | + "data": "enableaddress" | ||
792 | + }, | ||
793 | + { | ||
794 | + "type": "postback", | ||
795 | + "label": "유튜브 주소 전송 X", | ||
796 | + "data": "unableaddress" | ||
797 | + }, | ||
798 | + ] | ||
799 | + } | ||
800 | + } | ||
801 | + ] | ||
802 | + } | ||
803 | + } | ||
804 | + | ||
805 | + ); | ||
806 | +} | ||
807 | + | ||
808 | +exports.enableaddress = function(replyToken,userId) | ||
809 | +{ | ||
810 | + console.log('주소 활성화 됨.'); | ||
811 | + setting_SendAddress[setting_userId.indexOf(userId)]=1; | ||
812 | + request.post( | ||
813 | + { | ||
814 | + url: TARGET_URL, | ||
815 | + headers: | ||
816 | + { | ||
817 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
818 | + }, | ||
819 | + json: | ||
820 | + { | ||
821 | + "replyToken": replyToken, | ||
822 | + "messages": | ||
823 | + [ | ||
824 | + { | ||
825 | + "type": "text", | ||
826 | + "text": "이제 유튜브 주소가 전송됩니다!" | ||
827 | + } | ||
828 | + ] | ||
829 | + } | ||
830 | + } | ||
831 | + ); | ||
832 | +} | ||
833 | +exports.unableaddress = function(replyToken,userId) | ||
834 | +{ | ||
835 | + console.log('주소 비활성화 됨.'); | ||
836 | + setting_SendAddress[setting_userId.indexOf(userId)]=0; | ||
837 | + request.post( | ||
838 | + { | ||
839 | + url: TARGET_URL, | ||
840 | + headers: | ||
841 | + { | ||
842 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
843 | + }, | ||
844 | + json: | ||
845 | + { | ||
846 | + "replyToken": replyToken, | ||
847 | + "messages": | ||
848 | + [ | ||
849 | + { | ||
850 | + "type": "text", | ||
851 | + "text": "이제 유튜브 주소가 전송되지 않습니다!" | ||
852 | + } | ||
853 | + ] | ||
854 | + } | ||
855 | + } | ||
856 | + ); | ||
857 | +} | ||
858 | + | ||
859 | +exports.check = function (message, replyToken, userId) { | ||
860 | + if (setting_userId.indexOf(userId)==-1) // 새로운 사용자가 이용할때, 설정 초기값 세팅 | ||
861 | + { | ||
862 | + setting_userId.push(userId); | ||
863 | + setting_Thumbnail.push(1); | ||
864 | + setting_SendAmount.push(1); | ||
865 | + setting_SendAddress.push(1); | ||
866 | + console.log("알림: 새로운 사용자가 발견됨"); | ||
867 | + } | ||
868 | + | ||
869 | + var choice; | ||
870 | + var choose; | ||
871 | + | ||
872 | + switch (message) { | ||
873 | + case "플레이리스트": | ||
874 | + PLAYLIST(replyToken); | ||
875 | + break; | ||
876 | + case "도움말": | ||
877 | + sendMessage = "- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다." | ||
878 | + +"\n"+"예시) 소녀시대 노래" | ||
879 | + +"\n"+"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!" | ||
880 | + +"\n"+"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~4), 유튜브 주소 전송 여부를 설정하실 수 있습니다." | ||
881 | + +"\n"+"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요."; | ||
882 | + HELP(replyToken,sendMessage); | ||
883 | + break; | ||
884 | + case "설정": | ||
885 | + SETTINGS(replyToken); | ||
886 | + break; | ||
887 | + default: //일반 검색 | ||
888 | + var optionParams={ | ||
889 | + q:message, | ||
890 | + part:"snippet", | ||
891 | + key:Info.YoutubeKey, | ||
892 | + maxResults:10 | ||
893 | + }; | ||
894 | + optionParams.q=encodeURI(optionParams.q); | ||
895 | + var url="https://www.googleapis.com/youtube/v3/search?"; | ||
896 | + for(var option in optionParams){ | ||
897 | + url+=option+"="+optionParams[option]+"&"; | ||
898 | + } | ||
899 | + | ||
900 | + //url의마지막에 붙어있는 & 정리 | ||
901 | + url=url.substr(0, url.length-1); | ||
902 | + | ||
903 | + request(url, function(err, res, body){ | ||
904 | + var title=[] | ||
905 | + var url2=[] | ||
906 | + var data=JSON.parse(body).items; | ||
907 | + for(var content in data) | ||
908 | + { | ||
909 | + title.push(data[content].snippet.title); | ||
910 | + url2.push(data[content].id.videoId); | ||
911 | + } | ||
912 | + if (title.length==0) | ||
913 | + console.log('검색된 동영상이 없습니다.'); | ||
914 | + else | ||
915 | + SEND(replyToken,title,url2,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]); | ||
916 | + }); | ||
917 | + } | ||
214 | } | 918 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
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 | + |
21 | + if (eventObj.type=="message") // 일반 메시지일때 | ||
22 | + { | ||
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 | + } | ||
30 | res.sendStatus(200); | 107 | res.sendStatus(200); |
31 | -}); | 108 | + } |
32 | -function send(replyToken, message) { | 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