Toggle navigation
Toggle navigation
This project
Loading...
Sign in
은승우
/
LINEBOT
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
권은령
2019-12-04 23:03:16 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
8c965e70a7b6ba29fcf5c42f36e3debbc514e7aa
8c965e70
1 parent
d6d62916
Update display music list
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
151 additions
and
30 deletions
app.js
key.pem
mymusic.js
app.js
View file @
8c965e7
var
createServer
=
require
(
"auto-sni"
);
var
express
=
require
(
"express"
);
var
app
=
express
();
var
cheerio
=
require
(
'cheerio'
);
const
line
=
require
(
'@line/bot-sdk'
);
var
request
=
require
(
'request'
);
var
https
=
require
(
'https'
);
var
http
=
require
(
'http'
);
const
lex
=
require
(
'greenlock-express'
).
create
({
var
fs
=
require
(
"fs"
);
var
httpsOptions
=
{
hostname
:
'oss.chatbot.bu.to'
,
ca
:
fs
.
readFileSync
(
'/etc/letsencrypt/live/oss.chatbot.bu.to/fullchain.pem'
),
key
:
fs
.
readFileSync
(
'/etc/letsencrypt/live/oss.chatbot.bu.to/privkey.pem'
),
cert
:
fs
.
readFileSync
(
'/etc/letsencrypt/live/oss.chatbot.bu.to/cert.pem'
)
};
http
.
createServer
(
app
).
listen
(
80
);
https
.
createServer
(
httpsOptions
,
app
).
listen
(
443
);
/*
const lex= require('greenlock-express').create({
version: 'draft-11', // 버전2
store: require('greenlock-store-fs'),
configDir: '/etc/letsencrypt', // 또는 ~/letsencrypt/etc
approveDomains: (opts, certs, cb) => {
if (certs) {
opts
.
domains
=
[
'oss.chatbot.bu.to'
,
'oss.chatbot.bu.to'
];
opts.domains = ['oss.chatbot.bu.to', '
www.
oss.chatbot.bu.to'];
} else {
opts.email = 'sweun1@naver.com';
opts.agreeTos = true;
}
cb(null, { options: opts, certs });
},
renewWithin: 81 * 24 * 60 * 60 * 1000,
renewBy: 80 * 24 * 60 * 60 * 1000,
});
//papago api
});
https.createServer(lex.httpsOptions, lex.middleware(app)).listen((process.env.SSL_PORT || 443),()=>{
console.log("server on 443");
});
http.createServer(lex.middleware(require('redirect-https')())).listen(process.env.PORT || 80,()=>{
console.log("server on 80");
});
*/
//papago api
//번역 api_url
var
translate_api_url
=
'https://openapi.naver.com/v1/papago/n2mt'
;
...
...
@@ -45,7 +63,6 @@ const config = {
channelSecret
:
'75a2fd95ec26d716cac6fcdd520b9b9c'
};
// create LINE SDK client
const
client
=
new
line
.
Client
(
config
);
// create Express app
...
...
@@ -54,34 +71,108 @@ const client = new line.Client(config);
// register a webhook handler with middleware
// about the middleware, please refer to doc
// Creates a client
/* google-api
var vision = require('google-vision-api-client');
var requtil = vision.requtil;
//Prepare your service account from trust preview certificated project
var jsonfile = '/home/ubuntu/a/LINEBOT/googlevisionapikey.json';
//Initialize the api
vision.init(jsonfile);
//Build the request payloads
var d = requtil.createRequests().addRequest(
requtil.createRequest('/home/ubuntu/a/LINEBOT/photo/Fancy-TWICE.jpg')
.withFeature('TEXT_DETECTION', 3)
.build());
//Do query to the api server
vision.query(d, function(e, r, d){
if(e) console.log('ERROR:', e);
console.log(JSON.stringify(d));
});
*/
app
.
post
(
'/webhook'
,
line
.
middleware
(
config
),
(
req
,
res
)
=>
{
console
.
log
(
res
.
statusCode
);
Promise
.
all
(
req
.
body
.
events
.
map
(
handleEvent
))
.
then
((
result
)
=>
res
.
json
(
result
))
.
catch
((
err
)
=>
{
console
.
log
(
err
);
console
.
log
(
err
.
originalError
.
response
)
})
});
// event handler
function
handleEvent
(
event
)
{
function
handleEvent
(
event
)
{
console
.
log
(
event
.
message
);
if
(
event
.
type
!==
'message'
||
event
.
message
.
type
!==
'text'
)
{
if
(
event
.
type
!==
'message'
||
event
.
message
.
type
!==
'text'
)
{
// ignore non-text-message event
return
Promise
.
resolve
(
null
);
}
return
new
Promise
(
function
(
resolve
,
reject
)
{
else
if
(
event
.
message
.
text
.
substring
(
0
,
5
)
==
'순위 보기'
)
{
// music list 출력
return
new
Promise
(
function
(
resolve
,
reject
){
var
url
=
"https://www.genie.co.kr/chart/top200"
;
request
(
url
,
function
(
error
,
response
,
html
){
var
$
=
cheerio
.
load
(
html
);
var
songList
=
[];
const
$bodyList
=
$
(
'#body-content > div.newest-list > div > table > tbody > tr'
);
$bodyList
.
each
(
function
(
i
,
elem
)
{
if
(
i
<
20
)
{
songList
.
push
(
{
singer
:
$
(
this
).
find
(
"td.info"
).
find
(
"a.artist.ellipsis"
).
text
().
trim
(),
song
:
$
(
this
).
find
(
"td.info"
).
find
(
"a.title.ellipsis"
).
text
().
trim
(),
url
:
'https://www.genie.co.kr/detail/songInfo?xgnm='
+
$
(
this
).
attr
(
"songid"
)
});
}
else
{
return
;
}
});
var
result
=
''
;
for
(
var
i
=
0
;
i
<
songList
.
length
;
i
++
)
{
result
+=
i
+
1
+
". "
+
songList
[
i
].
singer
+
" - "
+
songList
[
i
].
song
+
"\n"
;
}
console
.
log
(
result
);
});
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
});
}
else
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
//언어 감지 option
var
detect_options
=
{
var
detect_options
=
{
url
:
languagedetect_api_url
,
form
:
{
'query'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
//papago 언어 감지
request
.
post
(
detect_options
,
async
(
error
,
response
,
body
)
=>
{
console
.
log
(
response
.
statusCode
);
if
(
!
error
&&
response
.
statusCode
==
200
){
request
.
post
(
detect_options
,
(
error
,
response
,
body
)
=>
{
if
(
!
error
&&
response
.
statusCode
==
200
)
{
var
detect_body
=
JSON
.
parse
(
response
.
body
);
var
source
=
''
;
var
target
=
''
;
...
...
@@ -90,9 +181,9 @@ function handleEvent(event) {
//언어 감지가 제대로 됐는지 확인
console
.
log
(
detect_body
.
langCode
);
//번역은 한국어->영어 / 영어->한국어만 지원
if
(
detect_body
.
langCode
==
'ko'
||
detect_body
.
langCode
==
'en'
){
if
(
detect_body
.
langCode
==
'ko'
||
detect_body
.
langCode
==
'en'
)
{
source
=
detect_body
.
langCode
==
'ko'
?
'ko'
:
'en'
;
target
=
source
==
'ko'
?
'en'
:
'ko'
;
//papago 번역 option
...
...
@@ -100,11 +191,12 @@ function handleEvent(event) {
url
:
translate_api_url
,
// 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
form
:
{
'source'
:
source
,
'target'
:
target
,
'text'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
,
"Content-Type"
:
"application/x-www-form-urlencoded"
}
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
// Naver Post API
await
request
.
post
(
options
,
function
(
error
,
response
,
body
){
console
.
log
(
"?!"
);
request
.
post
(
options
,
function
(
error
,
response
,
body
){
// Translate API Sucess
if
(
!
error
&&
response
.
statusCode
==
200
){
// JSON
...
...
@@ -112,25 +204,29 @@ function handleEvent(event) {
// Message 잘 찍히는지 확인
result
.
text
=
objBody
.
message
.
result
.
translatedText
;
console
.
log
(
resul
t
);
console
.
log
(
"result: "
+
result
.
tex
t
);
//번역된 문장 보내기
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
);
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
}
});
console
.
log
(
"?!"
)
}
// 메시지의 언어가 영어 또는 한국어가 아닐 경우
else
{
else
{
result
.
text
=
'언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'
;
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
);
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
}
}
else
{
else
{
console
.
log
(
"status code is not 200"
);
}
});
});
}
}
app
.
get
(
'/'
,(
req
,
res
)
=>
{
res
.
send
(
"hello"
);
})
...
...
key.pem
0 → 100644
View file @
8c965e7
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArYTK96Vagqd1gQS6LOKELZL0TrnRXAOZiGVjcEo/bAdZzW6XnKPkdQuMqmy7
BgpmkimASdDnAINkfYPcrrx1Tb/943uOGlqDr7wtz9v8OZr5yihrCqseopd9vG2fyQ2uTXfUzbv0
EboOyHcSBhougFXhlj42/dWsIeUu+UxMqRMffDuDr97FG5zDjYhaatLaaez5rIiPtOWp8LHH8gNj
EbZF5S5jWOaFH1AWB4UeHheZMvPcN9O7BqBUFFJwIHtns6/ehRbGRDAfzH5pbo3J8Z+0PHWqYhUJ
ELOCVLMqCVO+/c3ZpwfwZQKSGejBcoa9B35by7mVLY6yIMn7jt+jYwIDAQABAoIBAQCWLKe9TU7Y
ZTY9Q2oeDq13BAiNWiToDfWDJry5IolhZbtDIMP2vaGr6yMDHLeAst+zAFgXisVinFUMjGMil9iu
QcvqZbTG+i+emK7Nhwb0lDw7yl9aDF+nOJWJzxbLWxvP0DZNGK5T6UOCHAttXJuCVtG2xoGxjow7
ia7t9Csk6AloBYpfko+9vUgkeZ6OGDXVtpSwhEpmTUb+Sx4g01JiKcgq5lZeEaLqUSYG+3AuNv/I
IKYbSuWuyW5rPO1Fr0TyIli8BqyTxmSZc6uWocyqqyCFp7o44lIkmuzY1GFbre1MqQFQgqoNnsRW
7RknHA2RnSo6shq3oBg9w0uxXl+BAoGBAOjKNI6Ret4Nvf+J6KyPY1g5OGCMryGTeH/8Cdbcky6L
UB04MBMMEoaFU21qzoamqXfE3EIXQVT/qh/LhNcT/+7Li/ujS6OFo52qOFxY2tU6PxRfRg72OyaA
hCpT5CIOMxM4lM2J7V5FpeGxAZkF30CaRGsVY8HCudi6H0y6SYOVAoGBAL7Ru+p66SQlbO3j/GOD
hSe3CleFjxKD0epIV8zHOTxMpRVNGXXnZym7VOcvcj6ZaSgmYaE4+c4d25HaaIgRDCRWYO46HUbg
Z2yv2UYD8jNqEqeWYO4aoCLNghhLCiD3hScjErXrQgY98O+3UkBhcAEYU3Nigsp9s+uJWYsirU0X
AoGARj+m5pMOUe4xtOioF1LZ9uilk7VAsFAxX+XuDjHYFIaj8X1gPI87E+8uAunlUwr+Pw9gLG2a
II1aiGfBOapmZGh2YMShccJFYrHYej2yJACEwqARozg5F2BXAfL4+DHyxc0gUnpZ8EXyTg49XjFA
ct1a4jm9Nd6OeNGJ2nyo7JUCgYBDuXSUeCMe7RmIJQ6C0z8DJXfKMGDjFV3/ZMWkrGCoAhvlP4P1
0LdQnGg51SEbDp+/3D9yVSJ0ASzYy0emY0aH7xBf/Mg/S43piU/4BZaEoPUV/c1RNKn5MC8oKBnk
MXVUuqH9Zw374SgOLGZI60wxV0zm+uOosoyU4B6jvx766QKBgGDpM+P1QaAaQob2sUYE42UsDPRE
agfuysocl+QQOmLgLckGcS7MqVOR4PAJzZQxIUnZDaKT/wVab/o9T+X3JhdB5vewFol5elQ9tcho
rlseuY+Nq2D/HAhgCIHtGsnbu8icl88aE0GPN0KU38egZdAlAhAVJGsVPvI2ci6MHs1+
-----END RSA PRIVATE KEY-----
\ No newline at end of file
mymusic.js
View file @
8c965e7
...
...
@@ -30,12 +30,14 @@ request(url, function(error, response, html)
return
;
}
})
var
result
=
''
;
for
(
var
i
=
0
;
i
<
songList
.
length
;
i
++
)
{
console
.
log
(
songList
[
i
]);
result
+=
i
+
1
+
". "
+
songList
[
i
].
singer
+
" - "
+
songList
[
i
].
song
+
"\n"
;
//console.log(i+1 + ". "+ songList[i].singer+" - "+songList[i].song);
}
console
.
log
(
result
);
var
randnum
=
function
getRandomInt
(
min
,
max
)
{
min
=
Math
.
ceil
(
min
);
...
...
Please
register
or
login
to post a comment