엄성진

Fix Random Recommend, Fix User Setting(part)

......@@ -6,7 +6,7 @@ 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이상, 10이하의 정수) (기본값:1)
......@@ -23,15 +23,17 @@ function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색
temp_title[i] = title[i];
temp_url2[i] = url2[i];
temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));
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";
}
console.log(sendMessage);
if (thumbnail==1) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request.post(
{
url: TARGET_URL,
......@@ -57,58 +59,58 @@ function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색
}
}
);
}
function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함수
{
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
else //썸네일 비활성화
request.post(
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
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)//플레이리스트에서 나온 내용 전송하는 함수
{
//sendMessage = JSON.stringify(response.data.items[0].snippet.title);
var random_order=[0,1,2,3,4,5,6,7,8,9];
shuffle(random_order)
sendMessage = "";
var temp_title = [], temp_url = [], temp_url2 = [], temp_thumpnail = [];
for (var i = 0; i < SendAmount; i++) {
temp_title[i] = JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, "");
temp_url2[i] = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
//temp_url2[i] = choice;
temp_url[i] = 'https://www.youtube.com/watch?v=' + (temp_url2[i].replace(/\"/gi, ""));
//temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg";
// 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌.
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";
// temp_thumpnail[i] + "\n" + "\n";
}
console.log(sendMessage);
if (thumbnail==1) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
if (thumbnail) //썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request.post(
{
url: TARGET_URL,
......@@ -134,27 +136,141 @@ function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)/
}
}
);
else //썸네일 비활성화
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함수
{
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
}
]
}
}
);
}
function SETTINGS(replyToken,sendMessage) //설정 함수
{
console.log(sendMessage);
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": sendMessage
},
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "설정",
"text": "설정하려는 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "썸네일 출력 여부 변경",
"data": "썸네일"
},
{
"type": "postback",
"label": "추천 음악 개수 조정",
"data": "개수"
},
{
"type": "postback",
"label": "유튜브 주소 출력 여부 변경",
"data": "주소"
}
]
}
}
]
}
}
);
}
exports.thumbnail_settings = function (replyToken, userId)
{
console.log('썸네일 출력 설정');
// 여기서 썸네일을 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_Thumbnail[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
// 이곳에 userid에 맞게 setting_Thumbnail, setting_SendAmount, setting_SendAddress 의 값을 수정해주시면 됩니다.
}
exports.amount_settings = function (replyToken, userId)
{
console.log('출력량 설정');
// 여기서 노래 몇개를 출력할지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAmount[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// 이거는 단순하게 숫자를 입력받으면 될 것 같습니다. 다만 1,2,3,4,5,6,7,8,9,10 의 응답만 받도록 해주셔야 합니다. (예외처리 필수)
}
exports.address_settings = function (replyToken, userId)
{
console.log('유튜브 주소 출력 설정');
// 여기서 유튜브 주소를 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAddress[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
}
exports.check = function (message, replyToken, userId) {
if (setting_userId.indexOf(userId)==-1)
if (setting_userId.indexOf(userId)==-1) // 새로운 사용자가 이용할때, 설정 초기값 세팅
{
setting_userId.push(userId);
setting_Thumbnail.push(1);
setting_SendAmount.push(1);
setting_SendAddress.push(1);
console.log("없당");
}
else
{
console.log("있당");
console.log("알림: 새로운 사용자가 발견됨");
}
......@@ -249,7 +365,7 @@ exports.check = function (message, replyToken, userId) {
if (title.length==0)
console.log('검색된 동영상이 없습니다.');
else
SEND(replyToken,title,url2,1,3,1);
SEND(replyToken,title,url2,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
});
......@@ -283,12 +399,16 @@ exports.check = function (message, replyToken, userId) {
}
else if (choose == 001){ // 도움말
sendMessage = "도움말 예시";
sendMessage = "- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다."
+"\n"+"예시) 소녀시대 노래"
+"\n"+"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+"\n"+"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~10), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+"\n"+"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요.";
SEND_TEXT(replyToken,sendMessage);
}
else if (choose == 002) { // 설정
sendMessage = "설정 예시";
SEND_TEXT(replyToken,sendMessage);
SETTINGS(replyToken,sendMessage);
}
else { //플레이리스트
......@@ -308,7 +428,7 @@ exports.check = function (message, replyToken, userId) {
if (video.length == 0)
console.log('검색된 동영상이 없습니다.');
else
SEND_LIST(replyToken,response,choice,1,10,1);
SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
}
)
}
......
......@@ -20,11 +20,33 @@ app.post('/hook', function (req, res) {
// request log
console.log('======================', new Date(), '======================');
send(eventObj.replyToken, message.text,eventObj.source.userId);
console.log(eventObj);
if (eventObj.type=="message") // 일반 메시지일때
react(eventObj.replyToken, message.text,eventObj.source.userId);
else if (eventObj.postback.data=="썸네일") //설정에서 썸네일 설정버튼을 눌렀을때
songs.thumbnail_settings(eventObj.replyToken,eventObj.source.userId);
//else if (썸네일 설정 버튼을 누르고 거기서 응답이 들어왔을때)
else if (eeventObj.postback.data=="개수") //설정에서 출력 개수 설정버튼을 눌렀을때
songs.amount_settings(eventObj.replyToken,eventObj.source.userId);
//else if (출력 개수 설정 버튼을 누르고 거기서 응답이 들어왔을때)
else if (eventObj.postback.data=="주소") //설정에서 유튜브 주소 설정버튼을 눌렀을때
songs.address_settings(eventObj.replyToken,eventObj.source.userId);
//else if (유튜브 주소 설정 버튼을 누르고 거기서 응답이 들어왔을때)
//★★else if (플레이리스트를 입력했을때 뜬 버튼에서 장르를 눌렀을때)
//★★else if (플레이리스트를 입력했을때 뜬 버튼에서 무드를 눌렀을때)
//★★else if (플레이리스트를 입력했을때 뜬 버튼에서 가수를 눌렀을때)
res.sendStatus(200);
});
function send(replyToken, message,userId) {
function react(replyToken, message,userId) {
request.post(
{
......