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