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