Showing
1 changed file
with
136 additions
and
83 deletions
... | @@ -11,6 +11,9 @@ const sslport = 23023; | ... | @@ -11,6 +11,9 @@ const sslport = 23023; |
11 | var client_id = 'YOUR_CLIENT_ID'; | 11 | var client_id = 'YOUR_CLIENT_ID'; |
12 | var client_secret = 'YOUR_CLIENT_SECRET'; | 12 | var client_secret = 'YOUR_CLIENT_SECRET'; |
13 | 13 | ||
14 | +var newsOn = false; | ||
15 | +var newsOff = true; | ||
16 | + | ||
14 | const bodyParser = require('body-parser'); | 17 | const bodyParser = require('body-parser'); |
15 | var app = express(); | 18 | var app = express(); |
16 | app.use(bodyParser.json()); | 19 | app.use(bodyParser.json()); |
... | @@ -20,95 +23,145 @@ app.post('/hook', function (req, res) { | ... | @@ -20,95 +23,145 @@ app.post('/hook', function (req, res) { |
20 | var source = eventObj.source; | 23 | var source = eventObj.source; |
21 | var message = eventObj.message; | 24 | var message = eventObj.message; |
22 | 25 | ||
23 | - // request log | 26 | + // request log |
24 | - console.log('======================', new Date() ,'======================'); | 27 | + console.log('======================', new Date() ,'======================'); |
25 | - console.log('[request]', req.body); | 28 | + console.log('[request]', req.body); |
26 | - console.log('[request source] ', eventObj.source); | 29 | + console.log('[request source] ', eventObj.source); |
27 | - console.log('[request message]', eventObj.message); | 30 | + console.log('[request message]', eventObj.message); |
31 | + | ||
32 | + if (message.text == 'news on') { | ||
33 | + newsOn = true; | ||
34 | + newsOff = false; | ||
35 | + request.post( | ||
36 | + { | ||
37 | + url: TARGET_URL, | ||
38 | + headers: { | ||
39 | + 'Authorization': `Bearer ${TOKEN}` | ||
40 | + }, | ||
41 | + json: { | ||
42 | + "replyToken":eventObj.replyToken, | ||
43 | + "messages":[ | ||
44 | + { | ||
45 | + "type":"text", | ||
46 | + "text":"[news On] 키워드를 입력 하세요." | ||
47 | + } | ||
48 | + ] | ||
49 | + } | ||
50 | + },(error, response, body) => { | ||
51 | + console.log(body) | ||
52 | + }); | ||
53 | + } else if ( message.text == 'news off') { | ||
54 | + newsOn = false; | ||
55 | + newsOff = true; | ||
56 | + request.post( | ||
57 | + { | ||
58 | + url: TARGET_URL, | ||
59 | + headers: { | ||
60 | + 'Authorization': `Bearer ${TOKEN}` | ||
61 | + }, | ||
62 | + json: { | ||
63 | + "replyToken":eventObj.replyToken, | ||
64 | + "messages":[ | ||
65 | + { | ||
66 | + "type":"text", | ||
67 | + "text":"[news Off] 뉴스를 종료합니다." | ||
68 | + } | ||
69 | + ] | ||
70 | + } | ||
71 | + },(error, response, body) => { | ||
72 | + console.log(body) | ||
73 | + }); | ||
74 | + } | ||
28 | 75 | ||
29 | - if (true) { | 76 | + if (newsOn & message.text != 'help' & message.text != 'news on') { |
30 | - var api_url = 'https://openapi.naver.com/v1/search/news?query=' + encodeURI(message.text); // json 결과 | 77 | + var api_url = 'https://openapi.naver.com/v1/search/news?query=' + encodeURI(message.text); // json 결과 |
31 | - var options = { | 78 | + var options = { |
32 | - url: api_url, | 79 | + url: api_url, |
33 | - headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret} | 80 | + headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret} |
34 | - }; | 81 | + }; |
35 | - request.get(options, function (error, response, body) { | 82 | + request.get(options, function (error, response, body) { |
36 | - const obj = JSON.parse(body); | 83 | + const obj = JSON.parse(body); |
37 | - const str = JSON.stringify(obj.items[0]); | 84 | + const str = JSON.stringify(obj.items[0]); |
38 | - const obj2 = JSON.parse(str); | 85 | + const obj2 = JSON.parse(str); |
39 | - if (!error && response.statusCode == 200) { | 86 | + if (!error && response.statusCode == 200) { |
40 | - request.post( | 87 | + request.post( |
41 | - { | 88 | + { |
42 | - url: TARGET_URL, | 89 | + url: TARGET_URL, |
43 | - headers: { | 90 | + headers: { |
44 | - 'Authorization': `Bearer ${TOKEN}` | 91 | + 'Authorization': `Bearer ${TOKEN}` |
45 | - }, | 92 | + }, |
46 | - json: { | 93 | + json: { |
47 | - "replyToken":eventObj.replyToken, | 94 | + "replyToken":eventObj.replyToken, |
48 | - "messages": [ | 95 | + "messages": [ |
49 | - { | 96 | + { |
97 | + "type":"text", | ||
98 | + "text": "<<<헤드라인>>>\n" + JSON.stringify(obj2.title).replace(/<[^>]*>?/g, '') | ||
99 | + }, | ||
100 | + { | ||
50 | "type":"text", | 101 | "type":"text", |
51 | - "text": JSON.stringify(obj2.link) | 102 | + "text": "<<<주요문단>>>\n" + JSON.stringify(obj2.description).replace(/<[^>]*>?/g, '') |
52 | - }, | 103 | + }, |
53 | - { | 104 | + { |
54 | "type":"text", | 105 | "type":"text", |
55 | - "text": JSON.stringify(obj2.description).replace(/<[^>]*>?/g, '') | 106 | + "text": "뉴스 바로가기\n" + JSON.stringify(obj2.link) |
56 | - } | 107 | + } |
57 | - ] | 108 | + ] |
58 | - } | 109 | + } |
59 | - },(error, response, body) => { | 110 | + },(error, response, body) => { |
60 | - console.log(body) | 111 | + console.log(body) |
61 | - } | 112 | + } |
62 | - ) | 113 | + ) |
63 | - } else { | 114 | + } else { |
64 | - res.status(response.statusCode).end(); | 115 | + res.status(response.statusCode).end(); |
65 | - console.log('error = ' + response.statusCode); | 116 | + console.log('error = ' + response.statusCode); |
66 | - } | 117 | + } |
67 | - }); | 118 | + }); |
68 | 119 | ||
69 | - } | 120 | + } |
70 | 121 | ||
71 | - if (message.text == 'help') { | 122 | + if (message.text == 'help') { |
72 | - request.post( | 123 | + request.post( |
73 | - { | 124 | + { |
74 | - url: TARGET_URL, | 125 | + url: TARGET_URL, |
75 | - headers: { | 126 | + headers: { |
76 | - 'Authorization': `Bearer ${TOKEN}` | 127 | + 'Authorization': `Bearer ${TOKEN}` |
77 | - }, | 128 | + }, |
78 | - json: { | 129 | + json: { |
79 | - "replyToken":eventObj.replyToken, | 130 | + "replyToken":eventObj.replyToken, |
80 | - "messages":[ | 131 | + "messages":[ |
81 | - { | 132 | + { |
82 | - "type":"text", | 133 | + "type":"text", |
83 | - "text":"반갑습니다. 주식 알리미 입니다." | 134 | + "text":"*****************\ |
84 | - }, | 135 | + \n반갑습니다. 주식 news 알리미 입니다.\ |
85 | - { | 136 | + \n1. 뉴스 검색 기능 활성화\ |
86 | - "type":"text", | 137 | + \n\'news on\' 입력\ |
87 | - "text":"주식 관련 뉴스를 원하시면 \'뉴스\' 입력 후 원하는 종목을 검색하세요." | 138 | + \n2. 뉴스 검색 기능 비활성화\ |
88 | - } | 139 | + \n\'news off\' 입력\ |
89 | - ] | 140 | + \n*****************" |
90 | - } | 141 | + } |
91 | - },(error, response, body) => { | 142 | + ] |
92 | - console.log(body) | 143 | + } |
93 | - }); | 144 | + },(error, response, body) => { |
94 | - } | 145 | + console.log(body) |
95 | - | 146 | + }); |
147 | + } | ||
148 | + | ||
96 | 149 | ||
97 | - res.sendStatus(200); | 150 | + res.sendStatus(200); |
98 | }); | 151 | }); |
99 | 152 | ||
100 | try { | 153 | try { |
101 | - const option = { | 154 | + const option = { |
102 | - ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'), | 155 | + ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'), |
103 | - key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(), | 156 | + key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(), |
104 | - cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(), | 157 | + cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(), |
105 | - }; | 158 | + }; |
106 | - | 159 | + |
107 | - HTTPS.createServer(option, app).listen(sslport, () => { | 160 | + HTTPS.createServer(option, app).listen(sslport, () => { |
108 | - console.log(`[HTTPS] Server is started on port ${sslport}`); | 161 | + console.log(`[HTTPS] Server is started on port ${sslport}`); |
109 | - }); | 162 | + }); |
110 | - } catch (error) { | 163 | + } catch (error) { |
111 | - console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); | 164 | + console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); |
112 | - console.log(error); | 165 | + console.log(error); |
113 | - } | 166 | + } |
114 | - | 167 | + | ... | ... |
-
Please register or login to post a comment