Toggle navigation
Toggle navigation
This project
Loading...
Sign in
방승일
/
Stock_Alert_Chatbot
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
EC2 Default User
2022-06-08 16:21:08 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
4cfd2d803211048e19e5e9c2a9a022135b1019c9
4cfd2d80
1 parent
9e0b72d4
ADD : app.js
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
286 additions
and
0 deletions
app.js
app.js
0 → 100644
View file @
4cfd2d8
var
express
=
require
(
'express'
);
const
request
=
require
(
'request'
);
const
TARGET_URL
=
'https://api.line.me/v2/bot/message/reply'
const
BROAD_TARGET_URL
=
'https://api.line.me/v2/bot/message/broadcast'
const
TOKEN
=
'Z2sc8dyYuNcGkJmaoWKsZuWW1xRvJIhK8X7ZGA1jyVai7UdHsnriYQ8EdHPP1DICspF8HxxfvqxH9+hePe5y5JUf8OFYC20pSKGVm5ZFUsRn5+f6puVwQ1sirgU3+/+5EUkuCAH4KxRXcZTNRK2sdQdB04t89/1O/w1cDnyilFU='
;
//'채널 토큰으로 변경'
const
fs
=
require
(
'fs'
);
const
path
=
require
(
'path'
);
const
HTTPS
=
require
(
'https'
);
const
domain
=
"2017103049.osschatbot2022.ml"
;
//"도메인 변경"
const
sslport
=
23023
;
var
client_id
=
'uiPeCv0BhpI5i0cyMZ5T'
;
var
client_secret
=
'c1E9jfG020'
;
var
newsOn
=
false
;
var
newsOff
=
true
;
var
headline_max
=
''
;
var
headline_min
=
''
;
const
bodyParser
=
require
(
'body-parser'
);
var
app
=
express
();
app
.
use
(
bodyParser
.
json
());
app
.
post
(
'/hook'
,
function
(
req
,
res
)
{
var
eventObj
=
req
.
body
.
events
[
0
];
var
source
=
eventObj
.
source
;
var
message
=
eventObj
.
message
;
// request-reply
console
.
log
(
'======================'
,
new
Date
()
,
'======================'
);
console
.
log
(
'[request]'
,
req
.
body
);
console
.
log
(
'[request source] '
,
eventObj
.
source
);
console
.
log
(
'[request message]'
,
eventObj
.
message
);
if
(
message
.
text
==
'news on'
)
{
newsOn
=
true
;
newsOff
=
false
;
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
"[news On] 키워드를 입력 하세요."
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
});
}
else
if
(
message
.
text
==
'news off'
)
{
newsOn
=
false
;
newsOff
=
true
;
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
"[news Off] 뉴스를 종료합니다."
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
});
}
if
(
newsOn
&
message
.
text
!=
'help'
&
message
.
text
!=
'news on'
)
{
var
api_url
=
'https://openapi.naver.com/v1/search/news?query='
+
encodeURI
(
message
.
text
);
// json 결과
var
options
=
{
url
:
api_url
,
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
request
.
get
(
options
,
function
(
error
,
response
,
body
)
{
const
obj
=
JSON
.
parse
(
body
);
const
str
=
JSON
.
stringify
(
obj
.
items
[
0
]);
const
obj2
=
JSON
.
parse
(
str
);
if
(
!
error
&&
response
.
statusCode
==
200
)
{
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
"<<<헤드라인>>>\n"
+
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"<<<주요문단>>>\n"
+
JSON
.
stringify
(
obj2
.
description
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"뉴스 바로가기\n"
+
JSON
.
stringify
(
obj2
.
link
)
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
}
)
}
else
{
res
.
status
(
response
.
statusCode
).
end
();
console
.
log
(
'error = '
+
response
.
statusCode
);
}
});
}
if
(
message
.
text
==
'help'
)
{
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"replyToken"
:
eventObj
.
replyToken
,
"messages"
:[
{
"type"
:
"text"
,
"text"
:
"*****************\
\n반갑습니다. 주식 news 알리미 입니다.\
\n1. 뉴스 검색 기능 활성화\
\n\'news on\' 입력\
\n2. 뉴스 검색 기능 비활성화\
\n\'news off\' 입력\
\n*****************"
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
});
}
res
.
sendStatus
(
200
);
});
// Broadcast (push)
const
PushFunc_max
=
function
()
{
var
api_url
=
'https://openapi.naver.com/v1/search/news?query='
+
encodeURI
(
'상한가 주식'
);
// json 결과
var
options
=
{
url
:
api_url
,
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
request
.
get
(
options
,
function
(
error
,
response
,
body
)
{
const
obj
=
JSON
.
parse
(
body
);
const
str
=
JSON
.
stringify
(
obj
.
items
[
0
]);
const
obj2
=
JSON
.
parse
(
str
);
if
(
headline_max
==
''
||
headline_max
!=
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
))
{
if
(
!
error
&&
response
.
statusCode
==
200
)
{
headline_max
=
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
request
.
post
(
{
url
:
BROAD_TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
"[상한가 소식]"
},
{
"type"
:
"text"
,
"text"
:
"<<<헤드라인>>>\n"
+
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"<<<주요문단>>>\n"
+
JSON
.
stringify
(
obj2
.
description
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"뉴스 바로가기\n"
+
JSON
.
stringify
(
obj2
.
link
)
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
}
)
}
else
{
res
.
status
(
response
.
statusCode
).
end
();
console
.
log
(
'error = '
+
response
.
statusCode
);
}
}
else
{
console
.
log
(
'새로운 소식 없음_max'
)
}
});
};
const
PushFunc_min
=
function
()
{
var
api_url
=
'https://openapi.naver.com/v1/search/news?query='
+
encodeURI
(
'하한가 주식'
);
// json 결과
var
options
=
{
url
:
api_url
,
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
request
.
get
(
options
,
function
(
error
,
response
,
body
)
{
const
obj
=
JSON
.
parse
(
body
);
const
str
=
JSON
.
stringify
(
obj
.
items
[
0
]);
const
obj2
=
JSON
.
parse
(
str
);
if
(
headline_min
==
''
||
headline_min
!=
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
))
{
if
(
!
error
&&
response
.
statusCode
==
200
)
{
headline_min
=
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
request
.
post
(
{
url
:
BROAD_TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
TOKEN
}
`
},
json
:
{
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
"[하한가 소식]"
},
{
"type"
:
"text"
,
"text"
:
"<<<헤드라인>>>\n"
+
JSON
.
stringify
(
obj2
.
title
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"<<<주요문단>>>\n"
+
JSON
.
stringify
(
obj2
.
description
).
replace
(
/<
[^
>
]
*>
?
/g
,
''
)
},
{
"type"
:
"text"
,
"text"
:
"뉴스 바로가기\n"
+
JSON
.
stringify
(
obj2
.
link
)
}
]
}
},(
error
,
response
,
body
)
=>
{
console
.
log
(
body
)
}
)
}
else
{
res
.
status
(
response
.
statusCode
).
end
();
console
.
log
(
'error = '
+
response
.
statusCode
);
}
}
else
{
console
.
log
(
'새로운 소식 없음_min'
)
}
});
};
const
intervalId_max
=
setInterval
(
PushFunc_max
,
60000
);
const
intervalId_min
=
setInterval
(
PushFunc_min
,
60000
);
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
(),
};
HTTPS
.
createServer
(
option
,
app
).
listen
(
sslport
,
()
=>
{
console
.
log
(
`[HTTPS] Server is started on port
${
sslport
}
`
);
});
}
catch
(
error
)
{
console
.
log
(
'[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'
);
console
.
log
(
error
);
}
Please
register
or
login
to post a comment