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-05 21:02:04 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
3f79d179290904c4d750f196696c8d73e0cfc7fd
3f79d179
1 parent
66655b00
ud
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
220 additions
and
0 deletions
concert.js
concert.js
0 → 100644
View file @
3f79d17
var
createServer
=
require
(
"auto-sni"
);
var
express
=
require
(
"express"
);
var
app
=
express
();
const
line
=
require
(
'@line/bot-sdk'
);
var
request
=
require
(
'request'
);
var
https
=
require
(
'https'
);
var
http
=
require
(
'http'
);
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'
];
}
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"
);
});
//번역 api_url
var
translate_api_url
=
'https://openapi.naver.com/v1/papago/n2mt'
;
//언어감지 api_url
var
languagedetect_api_url
=
'https://openapi.naver.com/v1/papago/detectLangs'
// Naver Auth Key
//새로 발급받은 naver papago api id, pw 입력
var
client_id
=
'bIYcswH22VlQqT8OkkLm'
;
var
client_secret
=
'qLaERoks0u'
;
const
config
=
{
channelAccessToken
:
'dWno95uZ/FLPM5BoTUIM1kPenQ+UsEHYSWphPWcOxyjS7eylg6jhocxvJCeV8YumuVvYf+3bE/696ZSkOPJitxhXbXDe+1p2WoyCbHzD8KxxF1EKo6zvHfnhsIA8kZS93lNzUTQr1FVWaMmRKl7NzwdB04t89/1O/w1cDnyilFU='
,
channelSecret
:
'75a2fd95ec26d716cac6fcdd520b9b9c'
};
// create LINE SDK client
const
client
=
new
line
.
Client
(
config
);
// create Express app
// about Express itself: https://expressjs.com/
// register a webhook handler with middleware
// about the middleware, please refer to doc
var
cheerio
=
require
(
'cheerio'
);
var
data
=
require
(
'./event.json'
);
//json 불러오기
var
data_list
=
data
[
"DATA"
]
var
concert_list
=
[];
for
(
var
i
=
0
;
i
<
data_list
.
length
;
i
++
){
if
(
data_list
[
i
].
codename
==
"콘서트"
){
concert_list
.
push
(
data_list
[
i
].
title
);
}
}
for
(
var
i
=
0
;
i
<
concert_list
.
length
;
i
++
){
console
.
log
(
i
+
1
,
'. '
,
concert_list
[
i
],
'\n'
);
}
//콘서트 목록 만들기
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
);
})
});
// event handler
function
handleEvent
(
event
)
{
console
.
log
(
event
.
message
);
if
(
event
.
type
!==
'message'
||
event
.
message
.
type
!==
'text'
)
{
// ignore non-text-message event
return
Promise
.
resolve
(
null
);
}
else
if
(
event
.
message
.
text
.
substring
(
0
,
6
)
==
'콘서트 보기'
){
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
showlist
=
{
type
:
'text'
,
text
:
''
};
for
(
var
i
=
0
;
i
<
concert_list
.
length
;
i
++
)
{
showlist
.
text
+=
i
+
1
+
". "
+
concert_list
[
i
]
+
"\n"
;
}
console
.
log
(
showlist
.
text
);
var
result
=
{
type
:
'text'
,
text
:
showlist
.
text
}
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
});
}
else
if
(
isNaN
(
event
.
message
.
text
)){
var
selectnum
=
(
event
.
message
.
text
*
1
);
if
(
selectnum
>=
0
||
selectnum
<=
27
){
result
.
text
=
'목록에 존재하지 않는 콘서트입니다.'
;
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
}
return
new
Promise
(
function
(
resolve
,
reject
){
var
concert_name
=
concert_list
[
selectnum
-
1
];
var
$
=
cheerio
.
load
(
concert_name
);
var
keyword
=
$
.
text
();
console
.
log
(
keyword
);
var
options
=
{
method
:
'GET'
,
url
:
'https://www.googleapis.com/youtube/v3/search'
,
qs
:
{
key
:
'AIzaSyB4b-n8SSv73CLDKvFigpLPYA6yWG2JQ9A'
,
part
:
'id'
,
maxResults
:
'1'
,
order
:
'relevance'
,
q
:
keyword
,
type
:
'video'
}
};
var
videourl
=
{
type
:
'url'
,
label
:
'관련 영상'
,
url
:
''
};
request
(
options
,
function
(
error
,
result
,
body
){
if
(
error
)
throw
new
Error
(
error
);
var
temp
=
body
.
split
(
':'
);
videourl
.
url
+=
"https://www.youtube.com/watch?v="
+
temp1
[
13
].
substr
(
2
,
11
);
});
console
.
log
(
videourl
.
url
);
client
.
replyMessage
(
event
.
replyToken
,
videourl
).
then
(
resolve
).
catch
(
reject
);
})};
app
.
post
(
'/webhook'
,
line
.
middleware
(
config
),
(
req
,
res
)
=>
{
console
.
log
(
res
.
statusCode
);
Promise
.
all
(
req
.
body
.
events
.
map
(
handleEvent2
))
.
then
((
result
)
=>
res
.
json
(
result
))
.
catch
((
err
)
=>
{
console
.
log
(
err
);
})
});
return
new
Promise
(
function
(
resolve
,
reject
)
{
//언어 감지 option
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
){
var
detect_body
=
JSON
.
parse
(
response
.
body
);
var
source
=
''
;
var
target
=
''
;
var
result
=
{
type
:
'text'
,
text
:
''
};
//언어 감지가 제대로 됐는지 확인
console
.
log
(
detect_body
.
langCode
);
//번역은 한국어->영어 / 영어->한국어만 지원
if
(
detect_body
.
langCode
==
'ko'
||
detect_body
.
langCode
==
'en'
){
source
=
detect_body
.
langCode
==
'ko'
?
'ko'
:
'en'
;
target
=
source
==
'ko'
?
'en'
:
'ko'
;
//papago 번역 option
var
options
=
{
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"
}
};
// Naver Post API
await
request
.
post
(
options
,
function
(
error
,
response
,
body
){
// Translate API Sucess
if
(
!
error
&&
response
.
statusCode
==
200
){
// JSON
var
objBody
=
JSON
.
parse
(
response
.
body
);
// Message 잘 찍히는지 확인
result
.
text
=
objBody
.
message
.
result
.
translatedText
;
console
.
log
(
result
);
//번역된 문장 보내기
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
);
}
});
}
// 메시지의 언어가 영어 또는 한국어가 아닐 경우
else
{
result
.
text
=
'언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'
;
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
);
}
}
else
{
console
.
log
(
"status code is not 200"
);
}
});
});
}
Please
register
or
login
to post a comment