Showing
5 changed files
with
967 additions
and
278 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 | ... | ... |
... | @@ -6,209 +6,913 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' | ... | @@ -6,209 +6,913 @@ 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 | +{ | ||
17 | + | ||
18 | + sendMessage = ""; | ||
19 | + var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; | ||
20 | + for (var i = 0; i < SendAmount; i++) { | ||
11 | 21 | ||
12 | - const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성 | 22 | + temp_title[i] = title[i]; |
13 | 23 | ||
14 | - var choice; | 24 | + temp_url2[i] = url2[i]; |
15 | - var choose; | 25 | + if (sendaddress) //주소 전송 활성화 |
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"; | ||
31 | + } | ||
16 | 32 | ||
17 | - switch (message) { | 33 | + console.log(sendMessage); |
18 | - case "슬픈 노래": | 34 | + if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌. |
19 | - choose = 501; | 35 | + request.post( |
20 | - choice = ids.all_ids[choose][rand_0to9] | 36 | + { |
21 | - break; | 37 | + url: TARGET_URL, |
22 | - case "힙합 플레이리스트": | 38 | + headers: |
23 | - choose = 101; | 39 | + { |
24 | - choice = ids.all_ids[choose] | 40 | + 'Authorization': `Bearer ${Info.TOKEN}` |
25 | - break; | 41 | + }, |
26 | - case "피아노 플레이리스트": | 42 | + json: |
27 | - choose = 102; | 43 | + { |
28 | - choice = ids.all_ids[choose] | 44 | + "replyToken": replyToken, |
29 | - break; | 45 | + "messages": |
30 | - case "팝 플레이리스트": | 46 | + [ |
31 | - choose = 103; | 47 | + { |
32 | - choice = ids.all_ids[choose] | 48 | + "type": "image", |
33 | - break; | 49 | + "originalContentUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg", |
34 | - case "신나는 플레이리스트": | 50 | + "previewImageUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg" |
35 | - choose = 201; | 51 | + }, |
36 | - choice = ids.all_ids[choose] | 52 | + { |
37 | - break; | 53 | + "type": "text", |
38 | - case "슬픈 플레이리스트": | 54 | + "text": sendMessage |
39 | - choose = 202; | 55 | + } |
40 | - choice = ids.all_ids[choose] | 56 | + ] |
41 | - break; | 57 | + } |
42 | - case "블랙핑크 플레이리스트": | 58 | + } |
43 | - choose = 301; | 59 | + ); |
44 | - choice = ids.all_ids[choose] | 60 | + else //썸네일 비활성화 |
45 | - break; | 61 | + request.post( |
46 | - case "아이유 플레이리스트": | 62 | + { |
47 | - choose = 302; | 63 | + url: TARGET_URL, |
48 | - choice = ids.all_ids[choose] | 64 | + headers: |
49 | - break; | 65 | + { |
50 | - case "레드벨벳 플레이리스트": | 66 | + 'Authorization': `Bearer ${Info.TOKEN}` |
51 | - choose = 303; | 67 | + }, |
52 | - choice = ids.all_ids[choose] | 68 | + json: |
53 | - break; | 69 | + { |
54 | - case "트와이스 플레이리스트": | 70 | + "replyToken": replyToken, |
55 | - choose = 304; | 71 | + "messages": |
56 | - choice = ids.all_ids[choose] | 72 | + [ |
57 | - break; | 73 | + { |
74 | + "type": "text", | ||
75 | + "text": sendMessage | ||
76 | + } | ||
77 | + ] | ||
78 | + } | ||
79 | + } | ||
80 | + ); | ||
81 | +} | ||
82 | + | ||
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 | +} | ||
89 | + | ||
90 | +function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)//플레이리스트에서 나온 내용 전송하는 함수 | ||
91 | +{ | ||
92 | + var random_order=[0,1,2,3,4,5,6,7,8,9]; | ||
93 | + shuffle(random_order) | ||
58 | 94 | ||
59 | - // 아래는 case 추가를 위한 템플릿 | 95 | + sendMessage = ""; |
60 | - // case "": | 96 | + var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; |
61 | - // choose = ; | 97 | + for (var i = 0; i < SendAmount; i++) { |
62 | - // choice = ids.all_ids[choose] | ||
63 | 98 | ||
64 | - default: | 99 | + temp_title[i] = JSON.stringify(response.data.items[random_order[i]].snippet.title).replace(/\"/gi, ""); |
65 | - console.log("잘못 입력했어요~ 다시 입력하세요"); | 100 | + |
66 | - choice = -1; | 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"; | ||
67 | } | 108 | } |
68 | 109 | ||
69 | - if (choose > 500) { | ||
70 | 110 | ||
71 | - service.videos.list | 111 | + console.log(sendMessage); |
72 | - ( | 112 | + if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌. |
113 | + request.post( | ||
114 | + { | ||
115 | + url: TARGET_URL, | ||
116 | + headers: | ||
73 | { | 117 | { |
74 | - key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518', | 118 | + 'Authorization': `Bearer ${Info.TOKEN}` |
75 | - part: 'snippet', | ||
76 | - id: choice, | ||
77 | - fields: 'items(snippet(title))' | ||
78 | }, | 119 | }, |
79 | - function (err, response) { | 120 | + json: |
80 | - if (err) { | 121 | + { |
81 | - console.log('The API returned an error: ', err); | 122 | + "replyToken": replyToken, |
82 | - return; | 123 | + "messages": |
124 | + [ | ||
125 | + { | ||
126 | + "type": "image", | ||
127 | + "originalContentUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg", | ||
128 | + "previewImageUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg" | ||
129 | + }, | ||
130 | + { | ||
131 | + "type": "text", | ||
132 | + "text": sendMessage | ||
133 | + } | ||
134 | + ] | ||
135 | + } | ||
136 | + } | ||
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 | ||
154 | + } | ||
155 | + ] | ||
156 | + } | ||
157 | + } | ||
158 | + ); | ||
159 | +} | ||
160 | + | ||
161 | +function HELP(replyToken,sendMessage) //도움말 함수 | ||
162 | +{ | ||
163 | + console.log(sendMessage); | ||
164 | + request.post( | ||
165 | + { | ||
166 | + url: TARGET_URL, | ||
167 | + headers: | ||
168 | + { | ||
169 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
170 | + }, | ||
171 | + json: | ||
172 | + { | ||
173 | + "replyToken": replyToken, | ||
174 | + "messages": | ||
175 | + [ | ||
176 | + { | ||
177 | + "type": "text", | ||
178 | + "text": sendMessage | ||
83 | } | 179 | } |
180 | + ] | ||
181 | + } | ||
182 | + } | ||
183 | + ); | ||
184 | +} | ||
84 | 185 | ||
85 | - var video = response.data.items; | 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 | + } | ||
229 | + } | ||
230 | + ); | ||
231 | +} | ||
86 | 232 | ||
87 | - if (video.length == 0) { | 233 | +function sendplaylist(replyToken, userId, choose) |
88 | - console.log('검색된 동영상이 없습니다.'); | 234 | +{ |
235 | + var choice=ids.all_ids[choose]; | ||
236 | + service.playlistItems.list( | ||
237 | + { | ||
238 | + key: Info.YoutubeKey, | ||
239 | + part: 'snippet', | ||
240 | + fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보. | ||
241 | + maxResults: 10, | ||
242 | + playlistId: choice | ||
243 | + }, function (err, response){ | ||
244 | + if (err) { | ||
245 | + console.log('The API returned an error: ', err); | ||
246 | + return; | ||
247 | + } | ||
248 | + var video = response.data.items; | ||
249 | + if (video.length == 0) | ||
250 | + console.log('검색된 동영상이 없습니다.'); | ||
251 | + else | ||
252 | + SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]); | ||
253 | + } | ||
254 | + ) | ||
255 | + | ||
256 | +} | ||
257 | + | ||
258 | + | ||
259 | +function PLAYLIST(replyToken) //플레이리스트 함수 | ||
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 | + } | ||
89 | } | 299 | } |
90 | - else { | 300 | + ] |
91 | - sendMessage = JSON.stringify(response.data.items[0].snippet.title); | 301 | + } |
92 | - console.log(sendMessage); | 302 | + } |
93 | - request.post( | 303 | + ); |
94 | - { | 304 | +} |
95 | - url: TARGET_URL, | 305 | + |
96 | - headers: | 306 | +exports.genre = function (replyToken) |
307 | +{ | ||
308 | + console.log("플레이리스트-장르"); | ||
309 | + request.post( | ||
310 | + { | ||
311 | + url: TARGET_URL, | ||
312 | + headers: | ||
313 | + { | ||
314 | + 'Authorization': `Bearer ${Info.TOKEN}` | ||
315 | + }, | ||
316 | + json: | ||
317 | + { | ||
318 | + "replyToken": replyToken, | ||
319 | + "messages": | ||
320 | + [ | ||
321 | + { | ||
322 | + "type": "template", | ||
323 | + "altText": "장르 선택창 입니다.", | ||
324 | + "template": { | ||
325 | + "type": "buttons", | ||
326 | + "title": "장르", | ||
327 | + "text": "원하시는 장르를 골라주세요.", | ||
328 | + "actions": [ | ||
97 | { | 329 | { |
98 | - 'Authorization': `Bearer ${Info.TOKEN}` | 330 | + "type": "postback", |
331 | + "label": "힙합", | ||
332 | + "data": "hiphop" | ||
99 | }, | 333 | }, |
100 | - json: | ||
101 | { | 334 | { |
102 | - "replyToken": replyToken, | 335 | + "type": "postback", |
103 | - "messages": | 336 | + "label": "피아노", |
104 | - [ | 337 | + "data": "piano" |
105 | - { | 338 | + }, |
106 | - "type": "image", | 339 | + { |
107 | - "originalContentUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg", | 340 | + "type": "postback", |
108 | - "previewImageUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg" | 341 | + "label": "팝", |
109 | - }, | 342 | + "data": "pop" |
110 | - { | ||
111 | - "type": "text", | ||
112 | - "text": sendMessage | ||
113 | - } | ||
114 | - ] | ||
115 | } | 343 | } |
116 | - } | 344 | + ] |
117 | - ); | 345 | + } |
118 | } | 346 | } |
119 | - } | 347 | + ] |
348 | + } | ||
349 | + } | ||
350 | + ); | ||
351 | +} | ||
120 | 352 | ||
121 | - ) | 353 | +exports.hiphop = function(replyToken,userId) |
122 | - } | 354 | +{ |
355 | + console.log('플레이리스트-장르-힙합'); | ||
356 | + sendplaylist(replyToken, userId, 101); | ||
357 | +} | ||
123 | 358 | ||
124 | - else { | 359 | +exports.piano = function(replyToken,userId) |
125 | - if (choice == -1) { | 360 | +{ |
126 | - sendMessage = "잘못 입력했어요~ 다시 입력하세요"; | 361 | + console.log('플레이리스트-장르-피아노'); |
127 | - request.post( | 362 | + sendplaylist(replyToken, userId, 102); |
128 | - { | 363 | +} |
129 | - url: TARGET_URL, | 364 | + |
130 | - headers: | 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 | + [ | ||
131 | { | 386 | { |
132 | - 'Authorization': `Bearer ${Info.TOKEN}` | 387 | + "type": "template", |
133 | - }, | 388 | + "altText": "무드 선택창 입니다.", |
134 | - json: | 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 | + } | ||
406 | + } | ||
407 | + ] | ||
408 | + } | ||
409 | + } | ||
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 | + [ | ||
135 | { | 440 | { |
136 | - "replyToken": replyToken, | 441 | + "type": "template", |
137 | - "messages": | 442 | + "altText": "가수 선택창 입니다.", |
138 | - [ | 443 | + "template": { |
444 | + "type": "buttons", | ||
445 | + "title": "가수", | ||
446 | + "text": "원하시는 가수를 골라주세요.", | ||
447 | + "actions": [ | ||
448 | + { | ||
449 | + "type": "postback", | ||
450 | + "label": "블랙핑크", | ||
451 | + "data": "blackpink" | ||
452 | + }, | ||
139 | { | 453 | { |
140 | - "type": "text", | 454 | + "type": "postback", |
141 | - "text": sendMessage | 455 | + "label": "아이유", |
456 | + "data": "iu" | ||
457 | + } | ||
458 | + , | ||
459 | + { | ||
460 | + "type": "postback", | ||
461 | + "label": "레드벨벳", | ||
462 | + "data": "redvelvet" | ||
463 | + } | ||
464 | + , | ||
465 | + { | ||
466 | + "type": "postback", | ||
467 | + "label": "트와이스", | ||
468 | + "data": "twice" | ||
142 | } | 469 | } |
143 | ] | 470 | ] |
471 | + } | ||
144 | } | 472 | } |
145 | - } | 473 | + ] |
146 | - ); | 474 | + } |
147 | - } | 475 | + } |
148 | - else { | 476 | + ); |
149 | - service.playlistItems.list({ | 477 | +} |
150 | - key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518', | ||
151 | - part: 'snippet', | ||
152 | - fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보. | ||
153 | - maxResults: 10, | ||
154 | - playlistId: choice | ||
155 | - }, function (err, response) { | ||
156 | - if (err) { | ||
157 | - console.log('The API returned an error: ', err); | ||
158 | - return; | ||
159 | - } | ||
160 | 478 | ||
161 | - var video = response.data.items; | 479 | +exports.blackpink = function(replyToken,userId) |
162 | - if (video.length == 0) { | 480 | +{ |
163 | - console.log('검색된 동영상이 없습니다.'); | 481 | + console.log('플레이리스트-가수-블랙핑크'); |
164 | - } else { | 482 | + sendplaylist(replyToken, userId, 301); |
165 | - sendMessage = ""; | 483 | +} |
166 | - var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = []; | 484 | + |
167 | - for (var i = 0; i < 10; i++) { | 485 | +exports.iu = function(replyToken,userId) |
486 | +{ | ||
487 | + console.log('플레이리스트-가수-아이유'); | ||
488 | + sendplaylist(replyToken, userId, 302); | ||
489 | +} | ||
168 | 490 | ||
169 | - temp_title[i] = JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""); | 491 | +exports.redvelvet = function(replyToken,userId) |
492 | +{ | ||
493 | + console.log('플레이리스트-가수-레드벨벳'); | ||
494 | + sendplaylist(replyToken, userId, 303); | ||
495 | +} | ||
170 | 496 | ||
171 | - temp_url2[i] = JSON.stringify(response.data.items[i].snippet.resourceId.videoId); | 497 | +exports.twice = function(replyToken,userId) |
172 | - temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, "")); | 498 | +{ |
499 | + console.log('플레이리스트-가수-트와이스'); | ||
500 | + sendplaylist(replyToken, userId, 304); | ||
501 | +} | ||
173 | 502 | ||
174 | - //temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg"; | ||
175 | - // 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌. | ||
176 | 503 | ||
177 | - sendMessage += temp_title[i] + "\n" + | 504 | +exports.thumbnail_settings = function (replyToken) |
178 | - temp_url[i] + "\n" + "\n"; | 505 | +{ |
179 | - // temp_thumpnail[i] + "\n" + "\n"; | 506 | + |
180 | - } console.log(sendMessage); | 507 | + console.log('썸네일 전송 설정'); |
181 | - request.post( | 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 | + [ | ||
182 | { | 520 | { |
183 | - url: TARGET_URL, | 521 | + "type": "template", |
184 | - headers: | 522 | + "altText": "설정메뉴입니다.", |
185 | - { | 523 | + "template": { |
186 | - 'Authorization': `Bearer ${Info.TOKEN}` | 524 | + "type": "buttons", |
187 | - }, | 525 | + "title": "썸네일 전송 여부 변경", |
188 | - json: | 526 | + "text": "아래 항목을 골라주세요.", |
189 | - { | 527 | + "actions": [ |
190 | - "replyToken": replyToken, | 528 | + { |
191 | - "messages": | 529 | + "type": "postback", |
192 | - [ | 530 | + "label": "썸네일 전송 O", |
193 | - // { | 531 | + "data": "enablethumbnail" |
194 | - // "type": "image", | 532 | + }, |
195 | - // "originalContentUrl": temp_thumpnail[0], | 533 | + { |
196 | - // "previewImageUrl": temp_thumpnail[0] | 534 | + "type": "postback", |
197 | - // }, | 535 | + "label": "썸네일 전송 X", |
198 | - { | 536 | + "data": "unablethumbnail" |
199 | - "type": "text", | 537 | + }, |
200 | - "text": sendMessage | 538 | + ] |
201 | - } | ||
202 | - ] | ||
203 | } | 539 | } |
204 | } | 540 | } |
205 | - ); | 541 | + ] |
206 | - } | 542 | + } |
207 | - }) | 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 | + } | ||
208 | } | 653 | } |
209 | - } | ||
210 | 654 | ||
655 | + ); | ||
656 | +} | ||
211 | 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 | +} | ||
212 | 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 | +} | ||
213 | 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 | + ); | ||
214 | } | 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 | + } | ||
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 | + |
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