엄성진

Merge remote-tracking branch 'origin/dev'

*.json
node_modules/
vscode/
Info.js
Info.js
\ No newline at end of file
......
// 아래 주석을 참고해 플레이리스트 or 노래의 배열을 직접 만드시면 됩니다.
// 배열을 만들 때, 활용하실 id값이 플레이리스트의 id인지, 특정 노래의 id인지 구별해서 배열을 만드셔야 합니다.
// '플레이리스트'의 id라면 인덱스 500 이하로,
// '특정 노래'의 id라면 인덱스 500 이상으로 넣어주세요!
// 아래 예시를 보고 이해 안되시면, 편하게 카톡으로 말씀해주세요
// index < 500 = 플레이리스트
// index > 500 = 개별 곡
// index 100번대 = 장르 플레이리스트
// index 200번대 = 무드 플레이리스트
// index 300번대 = 가수 플레이리스트
// index 500번대 = 특정 플레이리스트의 노래 10곡
// index 101 = 장르 - 힙합
// index 102 = 장르 - 피아노
......@@ -25,8 +14,6 @@
// index 303 = 가수 - 레드벨벳
// index 304 = 가수 - 트와이스
// index 501 = 슬픈노래 10곡
exports.all_ids = [];
exports.all_ids[101] = 'PLfVO1GXBPp3s03voaFAWN7AkzEnpsGF1U'
......@@ -39,7 +26,4 @@ exports.all_ids[202] = 'PLfVO1GXBPp3vrR3ZcQFlCEC6oNdo_MQ_R'
exports.all_ids[301] = 'PLfVO1GXBPp3tgrwk3GDJi3v-E_Hnq3lDO'
exports.all_ids[302] = 'PLfVO1GXBPp3ubihJVPi6HSltRIuvSqSI1'
exports.all_ids[303] = 'PLfVO1GXBPp3u0ckIfYZkADGlSQ6LQoAIQ'
exports.all_ids[304] = 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK'
exports.all_ids[501] = ['p5iu1V30myk', 'i-SBnhaZSSU', 'Etfgb6A7hSI', 'IN2mml9xs_s',
'tp1uoFAfgHE', 'Qx22TnVVIfU', '3y1QIqR115A', 'VXBI1wt8XII', 'aWMBn2--E0Q', 'HyTbgBlnLCo'];
\ No newline at end of file
exports.all_ids[304] = 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK'
\ No newline at end of file
......
......@@ -6,209 +6,913 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var { google } = require('googleapis');
var service = google.youtube('v3');
//세팅,설정값
var setting_userId = []; //유저아이디보관
var setting_Thumbnail = []; // 1:썸네일 출력(기본값) / 0:미출력
var setting_SendAmount = []; // 보낼 양 (1이상, 4이하의 정수) (기본값:1)
var setting_SendAddress = []; // 1:유튜브 주소 출력(기본값) / 0:미출력
exports.check = function (message, replyToken) {
function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색해서 나온 내용 전송하는 함수
{
sendMessage = "";
var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
for (var i = 0; i < SendAmount; i++) {
const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성
temp_title[i] = title[i];
var choice;
var choose;
temp_url2[i] = url2[i];
if (sendaddress) //주소 전송 활성화
temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));
else
temp_url[i] = "";
sendMessage += temp_title[i] + "\n" +
temp_url[i] + "\n" + "\n";
}
switch (message) {
case "슬픈 노래":
choose = 501;
choice = ids.all_ids[choose][rand_0to9]
break;
case "힙합 플레이리스트":
choose = 101;
choice = ids.all_ids[choose]
break;
case "피아노 플레이리스트":
choose = 102;
choice = ids.all_ids[choose]
break;
case "팝 플레이리스트":
choose = 103;
choice = ids.all_ids[choose]
break;
case "신나는 플레이리스트":
choose = 201;
choice = ids.all_ids[choose]
break;
case "슬픈 플레이리스트":
choose = 202;
choice = ids.all_ids[choose]
break;
case "블랙핑크 플레이리스트":
choose = 301;
choice = ids.all_ids[choose]
break;
case "아이유 플레이리스트":
choose = 302;
choice = ids.all_ids[choose]
break;
case "레드벨벳 플레이리스트":
choose = 303;
choice = ids.all_ids[choose]
break;
case "트와이스 플레이리스트":
choose = 304;
choice = ids.all_ids[choose]
break;
console.log(sendMessage);
if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "image",
"originalContentUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg",
"previewImageUrl": "https://img.youtube.com/vi/" + url2[0] + "/hqdefault.jpg"
},
{
"type": "text",
"text": sendMessage
}
]
}
}
);
else //썸네일 비활성화
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
function shuffle(array) { //플레이리스트에서 랜덤으로 골라서 출력할 수 있도록 shuffle 함수를 추가함
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)//플레이리스트에서 나온 내용 전송하는 함수
{
var random_order=[0,1,2,3,4,5,6,7,8,9];
shuffle(random_order)
// 아래는 case 추가를 위한 템플릿
// case "":
// choose = ;
// choice = ids.all_ids[choose]
sendMessage = "";
var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
for (var i = 0; i < SendAmount; i++) {
default:
console.log("잘못 입력했어요~ 다시 입력하세요");
choice = -1;
temp_title[i] = JSON.stringify(response.data.items[random_order[i]].snippet.title).replace(/\"/gi, "");
temp_url2[i] = JSON.stringify(response.data.items[random_order[i]].snippet.resourceId.videoId);
if (sendaddress) //주소 활성화
temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));
else
temp_url[i] = "";
sendMessage += temp_title[i] + "\n" +
temp_url[i] + "\n" + "\n";
}
if (choose > 500) {
service.videos.list
(
console.log(sendMessage);
if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request.post(
{
url: TARGET_URL,
headers:
{
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: choice,
fields: 'items(snippet(title))'
'Authorization': `Bearer ${Info.TOKEN}`
},
function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "image",
"originalContentUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg",
"previewImageUrl": "https://img.youtube.com/vi/" + (temp_url2[0].replace(/\"/gi, "")) + "/hqdefault.jpg"
},
{
"type": "text",
"text": sendMessage
}
]
}
}
);
else //썸네일 비활성화
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
function HELP(replyToken,sendMessage) //도움말 함수
{
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
var video = response.data.items;
function SETTINGS(replyToken) //설정 함수
{
console.log("설정 메뉴 진입");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "설정",
"text": "설정하려는 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "썸네일 전송 여부 변경",
"data": "썸네일"
},
{
"type": "postback",
"label": "추천 음악 개수 조정",
"data": "개수"
},
{
"type": "postback",
"label": "유튜브 주소 전송 여부 변경",
"data": "주소"
}
]
}
}
]
}
}
);
}
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
function sendplaylist(replyToken, userId, choose)
{
var choice=ids.all_ids[choose];
service.playlistItems.list(
{
key: Info.YoutubeKey,
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: choice
}, function (err, response){
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0)
console.log('검색된 동영상이 없습니다.');
else
SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
}
)
}
function PLAYLIST(replyToken) //플레이리스트 함수
{
console.log("플레이리스트 선택창 진입");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "플레이리스트 선택창 입니다.",
"template": {
"type": "buttons",
"title": "분야",
"text": "원하시는 분야를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "장르",
"data": "genre"
},
{
"type": "postback",
"label": "무드",
"data": "mood"
},
{
"type": "postback",
"label": "가수",
"data": "singer"
}
]
}
}
else {
sendMessage = JSON.stringify(response.data.items[0].snippet.title);
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
]
}
}
);
}
exports.genre = function (replyToken)
{
console.log("플레이리스트-장르");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "장르 선택창 입니다.",
"template": {
"type": "buttons",
"title": "장르",
"text": "원하시는 장르를 골라주세요.",
"actions": [
{
'Authorization': `Bearer ${Info.TOKEN}`
"type": "postback",
"label": "힙합",
"data": "hiphop"
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "image",
"originalContentUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg",
"previewImageUrl": "https://img.youtube.com/vi/" + choice + "/hqdefault.jpg"
},
{
"type": "text",
"text": sendMessage
}
]
"type": "postback",
"label": "피아노",
"data": "piano"
},
{
"type": "postback",
"label": "팝",
"data": "pop"
}
}
);
]
}
}
}
]
}
}
);
}
)
}
exports.hiphop = function(replyToken,userId)
{
console.log('플레이리스트-장르-힙합');
sendplaylist(replyToken, userId, 101);
}
else {
if (choice == -1) {
sendMessage = "잘못 입력했어요~ 다시 입력하세요";
request.post(
{
url: TARGET_URL,
headers:
exports.piano = function(replyToken,userId)
{
console.log('플레이리스트-장르-피아노');
sendplaylist(replyToken, userId, 102);
}
exports.pop = function(replyToken,userId)
{
console.log('플레이리스트-장르-팝');
sendplaylist(replyToken, userId, 103);
}
exports.mood = function (replyToken)
{
console.log("플레이리스트-무드");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
"type": "template",
"altText": "무드 선택창 입니다.",
"template": {
"type": "buttons",
"title": "무드",
"text": "원하시는 무드를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "신남",
"data": "exciting"
},
{
"type": "postback",
"label": "슬픔",
"data": "sad"
}
]
}
}
]
}
}
);
}
exports.exciting = function(replyToken,userId)
{
console.log('플레이리스트-무드-신남');
sendplaylist(replyToken, userId, 201);
}
exports.sad = function(replyToken,userId)
{
console.log('플레이리스트-무드-슬픔');
sendplaylist(replyToken, userId, 202);
}
exports.singer = function (replyToken)
{
console.log("플레이리스트-가수");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"replyToken": replyToken,
"messages":
[
"type": "template",
"altText": "가수 선택창 입니다.",
"template": {
"type": "buttons",
"title": "가수",
"text": "원하시는 가수를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "블랙핑크",
"data": "blackpink"
},
{
"type": "text",
"text": sendMessage
"type": "postback",
"label": "아이유",
"data": "iu"
}
,
{
"type": "postback",
"label": "레드벨벳",
"data": "redvelvet"
}
,
{
"type": "postback",
"label": "트와이스",
"data": "twice"
}
]
}
}
}
);
}
else {
service.playlistItems.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: choice
}, function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
}
]
}
}
);
}
var video = response.data.items;
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
} else {
sendMessage = "";
var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
for (var i = 0; i < 10; i++) {
exports.blackpink = function(replyToken,userId)
{
console.log('플레이리스트-가수-블랙핑크');
sendplaylist(replyToken, userId, 301);
}
exports.iu = function(replyToken,userId)
{
console.log('플레이리스트-가수-아이유');
sendplaylist(replyToken, userId, 302);
}
temp_title[i] = JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, "");
exports.redvelvet = function(replyToken,userId)
{
console.log('플레이리스트-가수-레드벨벳');
sendplaylist(replyToken, userId, 303);
}
temp_url2[i] = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));
exports.twice = function(replyToken,userId)
{
console.log('플레이리스트-가수-트와이스');
sendplaylist(replyToken, userId, 304);
}
//temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg";
// 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌.
sendMessage += temp_title[i] + "\n" +
temp_url[i] + "\n" + "\n";
// temp_thumpnail[i] + "\n" + "\n";
} console.log(sendMessage);
request.post(
exports.thumbnail_settings = function (replyToken)
{
console.log('썸네일 전송 설정');
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
// {
// "type": "image",
// "originalContentUrl": temp_thumpnail[0],
// "previewImageUrl": temp_thumpnail[0]
// },
{
"type": "text",
"text": sendMessage
}
]
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "썸네일 전송 여부 변경",
"text": "아래 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "썸네일 전송 O",
"data": "enablethumbnail"
},
{
"type": "postback",
"label": "썸네일 전송 X",
"data": "unablethumbnail"
},
]
}
}
);
}
})
]
}
}
);
}
exports.enablethumbnail = function(replyToken,userId)
{
console.log('썸네일 활성화 됨.');
setting_Thumbnail[setting_userId.indexOf(userId)]=1;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 썸네일이 전송됩니다!"
}
]
}
}
);
}
exports.unablethumbnail = function(replyToken,userId)
{
console.log('썸네일 비활성화 됨.');
setting_Thumbnail[setting_userId.indexOf(userId)]=0;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 썸네일이 전송되지 않습니다!"
}
]
}
}
);
}
exports.amount_settings = function (replyToken, userId)
{
console.log('출력량 설정');
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "추천 음악 개수 조정",
"text": "원하는 추천 개수를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "1개",
"data": "amount1"
},
{
"type": "postback",
"label": "2개",
"data": "amount2"
},
{
"type": "postback",
"label": "3개",
"data": "amount3"
},
{
"type": "postback",
"label": "4개",
"data": "amount4"
}
]
}
}
]
}
}
}
);
}
exports.amount1 = function(replyToken,userId)
{
console.log('한 번에 1개씩');
setting_SendAmount[setting_userId.indexOf(userId)]=1;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 한 번에 한 개씩 추천합니다!"
}
]
}
}
);
}
exports.amount2 = function(replyToken,userId)
{
console.log('한 번에 2개씩');
setting_SendAmount[setting_userId.indexOf(userId)]=2;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 한 번에 두 개씩 추천합니다!"
}
]
}
}
);
}
exports.amount3 = function(replyToken,userId)
{
console.log('한 번에 3개씩');
setting_SendAmount[setting_userId.indexOf(userId)]=3;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 한 번에 세 개씩 추천합니다!"
}
]
}
}
);
}
exports.amount4 = function(replyToken,userId)
{
console.log('한 번에 4개씩');
setting_SendAmount[setting_userId.indexOf(userId)]=4;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 한 번에 네 개씩 추천합니다!"
}
]
}
}
);
}
exports.address_settings = function (replyToken)
{
console.log('유튜브 주소 전송 설정');
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "유튜브 주소 전송 여부 변경",
"text": "아래 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "유튜브 주소 전송 O",
"data": "enableaddress"
},
{
"type": "postback",
"label": "유튜브 주소 전송 X",
"data": "unableaddress"
},
]
}
}
]
}
}
);
}
exports.enableaddress = function(replyToken,userId)
{
console.log('주소 활성화 됨.');
setting_SendAddress[setting_userId.indexOf(userId)]=1;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 유튜브 주소가 전송됩니다!"
}
]
}
}
);
}
exports.unableaddress = function(replyToken,userId)
{
console.log('주소 비활성화 됨.');
setting_SendAddress[setting_userId.indexOf(userId)]=0;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 유튜브 주소가 전송되지 않습니다!"
}
]
}
}
);
}
exports.check = function (message, replyToken, userId) {
if (setting_userId.indexOf(userId)==-1) // 새로운 사용자가 이용할때, 설정 초기값 세팅
{
setting_userId.push(userId);
setting_Thumbnail.push(1);
setting_SendAmount.push(1);
setting_SendAddress.push(1);
console.log("알림: 새로운 사용자가 발견됨");
}
var choice;
var choose;
switch (message) {
case "플레이리스트":
PLAYLIST(replyToken);
break;
case "도움말":
sendMessage = "- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다."
+"\n"+"예시) 소녀시대 노래"
+"\n"+"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+"\n"+"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~4), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+"\n"+"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요.";
HELP(replyToken,sendMessage);
break;
case "설정":
SETTINGS(replyToken);
break;
default: //일반 검색
var optionParams={
q:message,
part:"snippet",
key:Info.YoutubeKey,
maxResults:10
};
optionParams.q=encodeURI(optionParams.q);
var url="https://www.googleapis.com/youtube/v3/search?";
for(var option in optionParams){
url+=option+"="+optionParams[option]+"&";
}
//url의마지막에 붙어있는 & 정리
url=url.substr(0, url.length-1);
request(url, function(err, res, body){
var title=[]
var url2=[]
var data=JSON.parse(body).items;
for(var content in data)
{
title.push(data[content].snippet.title);
url2.push(data[content].id.videoId);
}
if (title.length==0)
console.log('검색된 동영상이 없습니다.');
else
SEND(replyToken,title,url2,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
});
}
}
\ No newline at end of file
......
var express = require('express');
var Info = require('./Info');
const request = require('request');
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2020105631.oss2021.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply';
// var Info = require('./Info');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var app = express();
app.use(bodyParser.json());
<<<<<<< HEAD
var sad = require('./video_sad');
=======
var songs = require('./check');
>>>>>>> feature/YouTube_API
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
......@@ -26,10 +17,97 @@ app.post('/hook', function (req, res) {
// request log
console.log('======================', new Date(), '======================');
send(eventObj.replyToken, message.text);
res.sendStatus(200);
});
function send(replyToken, message) {
if (eventObj.type=="message") // 일반 메시지일때
{
react(eventObj.replyToken, message.text,eventObj.source.userId);
}
else
switch (eventObj.postback.data) {
case "썸네일": //설정에서 썸네일 설정버튼을 눌렀을때
songs.thumbnail_settings(eventObj.replyToken);
break;
case "enablethumbnail": //설정 -> 썸네일 설정 -> 활성화
songs.enablethumbnail(eventObj.replyToken,eventObj.source.userId);
break;
case "unablethumbnail": //설정 -> 썸네일 설정 -> 비활성화
songs.unablethumbnail(eventObj.replyToken,eventObj.source.userId);
break;
case "개수": //설정에서 전송 개수 설정버튼을 눌렀을때
songs.amount_settings(eventObj.replyToken,eventObj.source.userId);
break;
case "amount1": //설정 -> 전송 개수 -> 1
songs.amount1(eventObj.replyToken,eventObj.source.userId);
break;
case "amount2": //설정 -> 전송 개수 -> 2
songs.amount2(eventObj.replyToken,eventObj.source.userId);
break;
case "amount3": //설정 -> 전송 개수 -> 3
songs.amount3(eventObj.replyToken,eventObj.source.userId);
break;
case "amount4": //설정 -> 전송 개수 -> 4
songs.amount4(eventObj.replyToken,eventObj.source.userId);
break;
case "주소": //설정에서 유튜브 주소 설정버튼을 눌렀을때
songs.address_settings(eventObj.replyToken);
break;
case "enableaddress": //설정 -> 주소 설정 -> 활성화
songs.enableaddress(eventObj.replyToken,eventObj.source.userId);
break;
case "unableaddress": //설정 -> 주소 설정 -> 비활성화
songs.unableaddress(eventObj.replyToken,eventObj.source.userId);
break;
case "genre": // 플레이리스트 -> 장르
songs.genre(eventObj.replyToken);
break;
case "hiphop": // 플레이리스트 -> 장르 -> 힙합
songs.hiphop(eventObj.replyToken,eventObj.source.userId);
break;
case "piano": // 플레이리스트 -> 장르 -> 피아노
songs.piano(eventObj.replyToken,eventObj.source.userId);
break;
case "pop": // 플레이리스트 -> 장르 -> 팝
songs.pop(eventObj.replyToken,eventObj.source.userId);
break;
case "mood": // 플레이리스트 -> 무드
songs.mood(eventObj.replyToken);
break;
case "exciting": // 플레이리스트 -> 무드 -> 신남
songs.exciting(eventObj.replyToken,eventObj.source.userId);
break;
case "sad": // 플레이리스트 -> 무드 -> 슬픔
songs.sad(eventObj.replyToken,eventObj.source.userId);
break;
case "singer": // 플레이리스트 -> 가수
songs.singer(eventObj.replyToken);
break;
case "blackpink": // 플레이리스트 -> 가수 -> 블랙핑크
songs.blackpink(eventObj.replyToken,eventObj.source.userId);
break;
case "iu": // 플레이리스트 -> 가수 -> 아이유
songs.iu(eventObj.replyToken,eventObj.source.userId);
break;
case "redvelvet": // 플레이리스트 -> 가수 -> 레드벨벳
songs.redvelvet(eventObj.replyToken,eventObj.source.userId);
break;
case "twice": // 플레이리스트 -> 가수 -> 트와이스
songs.twice(eventObj.replyToken,eventObj.source.userId);
break;
}
res.sendStatus(200);
}
);
function react(replyToken, message,userId) {
request.post(
{
......@@ -37,16 +115,15 @@ function send(replyToken, message) {
},
function () {
songs.check(message, replyToken);
songs.check(message, replyToken,userId);
}
);
}
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(),
ca: fs.readFileSync('/etc/letsencrypt/live/' + Info.domain + '/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.domain + '/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.domain + '/cert.pem'), 'utf8').toString(),
};
HTTPS.createServer(option, app).listen(sslport, () => {
......
var Info = require('./Info');
exports.check = function(message,replyToken){
const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성
var ids = ['p5iu1V30myk', 'i-SBnhaZSSU', 'Etfgb6A7hSI', 'IN2mml9xs_s', // 모든 동영상 id를 관리하는 배열
'tp1uoFAfgHE', 'Qx22TnVVIfU', '3y1QIqR115A', 'VXBI1wt8XII', 'aWMBn2--E0Q', 'HyTbgBlnLCo'];
const request = require('request');
const fs = require('fs');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var { google } = require('googleapis');
var service = google.youtube('v3');
service.videos.list
(
{
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: ids[rand_0to9], // 동영상 Id random input
fields: 'items(snippet(title))'
},
function (err, response)
{
if (err)
{
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0)
{
console.log('검색된 동영상이 없습니다.');
}
else
{
sendMessage = JSON.stringify(response.data.items[0].snippet.title);
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "image",
"originalContentUrl": "https://img.youtube.com/vi/"+ids[rand_0to9]+"/hqdefault.jpg",
"previewImageUrl": "https://img.youtube.com/vi/"+ids[rand_0to9]+"/hqdefault.jpg"
},
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
}
)
}