Toggle navigation
Toggle navigation
This project
Loading...
Sign in
신지원
/
LineMusicChatbot
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Authored by
엄성진
2021-06-08 18:31:27 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
d3e2572522fe99bc9f16d857fc4cac8d033c9eac
d3e25725
1 parent
1dbae45f
Completed Development About Settings, Modify Help
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
199 additions
and
184 deletions
all_ids.js
check.js
index.js
all_ids.js
View file @
d3e2572
// 아래 주석을 참고해 플레이리스트 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
...
...
check.js
View file @
d3e2572
...
...
@@ -5,18 +5,15 @@ const fs = require('fs');
const
TARGET_URL
=
'https://api.line.me/v2/bot/message/reply'
var
{
google
}
=
require
(
'googleapis'
);
var
service
=
google
.
youtube
(
'v3'
);
// var app = express();
// app.use(bodyParser.json());
//세팅,설정값
var
setting_userId
=
[];
//유저아이디보관
var
setting_Thumbnail
=
[];
// 1:썸네일 출력(기본값) / 0:미출력
var
setting_SendAmount
=
[];
// 보낼 양 (1이상,
10
이하의 정수) (기본값:1)
var
setting_SendAmount
=
[];
// 보낼 양 (1이상,
4
이하의 정수) (기본값:1)
var
setting_SendAddress
=
[];
// 1:유튜브 주소 출력(기본값) / 0:미출력
function
SEND
(
replyToken
,
title
,
url2
,
thumbnail
,
SendAmount
,
sendaddress
)
//검색해서 나온 내용 전송하는 함수
{
//sendMessage = JSON.stringify(response.data.items[0].snippet.title);
sendMessage
=
""
;
var
temp_title
=
[],
temp_url
=
[],
temp_url2
=
[],
temp_thumpnail
=
[];
...
...
@@ -608,17 +605,164 @@ exports.unablethumbnail = function(replyToken,userId)
exports
.
amount_settings
=
function
(
replyToken
,
userId
)
{
console
.
log
(
'출력량 설정'
);
// 여기서 노래 몇개를 출력할지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAmount[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// 이거는 단순하게 숫자를 입력받으면 될 것 같습니다. 다만 1,2,3,4,5,6,7,8,9,10 의 응답만 받도록 해주셔야 합니다. (예외처리 필수)
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
,
)
exports
.
address_settings
=
function
(
replyToken
)
{
console
.
log
(
'유튜브 주소 전송 설정'
);
request
.
post
(
...
...
@@ -722,167 +866,53 @@ exports.check = function (message, replyToken, userId) {
console
.
log
(
"알림: 새로운 사용자가 발견됨"
);
}
//const rand_0to9 = Math.floor(Math.random() * 10); // 0~9까지 난수생성
var
choice
;
var
choose
;
switch
(
message
)
{
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
;
case
"플레이리스트"
:
choose
=
100
;
choice
=
0
;
PLAYLIST
(
replyToken
);
break
;
case
"도움말"
:
choose
=
001
;
choice
=
0
;
sendMessage
=
"- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다."
+
"\n"
+
"예시) 소녀시대 노래"
+
"\n"
+
"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+
"\n"
+
"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~4), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+
"\n"
+
"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요."
;
HELP
(
replyToken
,
sendMessage
);
break
;
case
"설정"
:
choose
=
002
;
choice
=
0
;
SETTINGS
(
replyToken
);
break
;
// 아래는 case 추가를 위한 템플릿
// case "":
// choose = ;
// choice = ids.all_ids[choose]
default
:
choose
=
500
;
choice
=
0
;
}
if
(
choose
==
500
)
{
//일반 검색
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
);
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
]
+
"&"
;
}
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
)]);
});
/*
service.videos.list
(
//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
)
{
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: choice,
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 {
SEND(replyToken,response,choice,1,1,1);
}
title
.
push
(
data
[
content
].
snippet
.
title
);
url2
.
push
(
data
[
content
].
id
.
videoId
);
}
)
*/
}
else
if
(
choose
==
001
){
// 도움말
sendMessage
=
"- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다."
+
"\n"
+
"예시) 소녀시대 노래"
+
"\n"
+
"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+
"\n"
+
"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~10), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+
"\n"
+
"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요."
;
HELP
(
replyToken
,
sendMessage
);
}
else
if
(
choose
==
002
)
{
// 설정
SETTINGS
(
replyToken
);
}
else
{
//플레이리스트
PLAYLIST
(
replyToken
);
/*
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)
if
(
title
.
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)]);
}
)
*/
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
...
...
index.js
View file @
d3e2572
...
...
@@ -10,8 +10,6 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var
app
=
express
();
app
.
use
(
bodyParser
.
json
());
var
songs
=
require
(
'./check'
);
var
thumbnail
=
1
;
// 썸네일 출력 여부 (1:출력/0:미출력/기본값:1)
var
thumbnail_yes
;
app
.
post
(
'/hook'
,
function
(
req
,
res
)
{
var
eventObj
=
req
.
body
.
events
[
0
];
...
...
@@ -37,15 +35,21 @@ app.post('/hook', function (req, res) {
songs
.
unablethumbnail
(
eventObj
.
replyToken
,
eventObj
.
source
.
userId
);
break
;
case
"개수"
:
//설정에서 출력 개수 설정버튼을 눌렀을때
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
);
...
...
@@ -99,9 +103,6 @@ app.post('/hook', function (req, res) {
case
"twice"
:
// 플레이리스트 -> 가수 -> 트와이스
songs
.
twice
(
eventObj
.
replyToken
,
eventObj
.
source
.
userId
);
break
;
//case (출력 개수 설정 버튼을 누르고 거기서 응답이 들어왔을때)
}
res
.
sendStatus
(
200
);
}
...
...
Please
register
or
login
to post a comment