Showing
5 changed files
with
96 additions
and
111 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 | ... | ... |
This diff is collapsed. Click to expand it.
| 1 | var express = require('express'); | 1 | var express = require('express'); |
| 2 | +var Info = require('./Info'); | ||
| 2 | const request = require('request'); | 3 | const request = require('request'); |
| 3 | const fs = require('fs'); | 4 | const fs = require('fs'); |
| 4 | const path = require('path'); | 5 | const path = require('path'); |
| 5 | const HTTPS = require('https'); | 6 | const HTTPS = require('https'); |
| 6 | -const domain = "2020105631.oss2021.tk" | ||
| 7 | const sslport = 23023; | 7 | const sslport = 23023; |
| 8 | const bodyParser = require('body-parser'); | 8 | const bodyParser = require('body-parser'); |
| 9 | -const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'; | 9 | +const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' |
| 10 | -// var Info = require('./Info'); | ||
| 11 | var app = express(); | 10 | var app = express(); |
| 12 | app.use(bodyParser.json()); | 11 | app.use(bodyParser.json()); |
| 13 | -<<<<<<< HEAD | ||
| 14 | - | ||
| 15 | -var sad = require('./video_sad'); | ||
| 16 | - | ||
| 17 | -======= | ||
| 18 | var songs = require('./check'); | 12 | var songs = require('./check'); |
| 19 | ->>>>>>> feature/YouTube_API | ||
| 20 | - | ||
| 21 | - | ||
| 22 | app.post('/hook', function (req, res) { | 13 | app.post('/hook', function (req, res) { |
| 23 | 14 | ||
| 24 | var eventObj = req.body.events[0]; | 15 | var eventObj = req.body.events[0]; |
| ... | @@ -26,10 +17,97 @@ app.post('/hook', function (req, res) { | ... | @@ -26,10 +17,97 @@ app.post('/hook', function (req, res) { |
| 26 | 17 | ||
| 27 | // request log | 18 | // request log |
| 28 | console.log('======================', new Date(), '======================'); | 19 | console.log('======================', new Date(), '======================'); |
| 29 | - send(eventObj.replyToken, message.text); | 20 | + |
| 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