Showing
2 changed files
with
112 additions
and
37 deletions
1 | const express = require('express'); | 1 | const express = require('express'); |
2 | -const path = require('path'); | 2 | +const request = require('request'); |
3 | -const foodapi = require('./foodapi'); | 3 | +const convert = require('xml-js'); |
4 | 4 | ||
5 | -//module - 변수 전달 | 5 | +const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' |
6 | -const {variable1, variable2} = require('./moduleEx'); | 6 | +const TOKEN = 'z5iy5sMU1W4xZAlwvn0/5x4U+4ZsqI0hKO1ZZNFxUGlNzGBjFg2D1u6/Ij5C/Sbkncx3hyYg7Nfz5JnMD8BG/9Z3TEEHPvy1A2XhkPKs04v0/n6TjH1A3e9X23zYdYmNSGyPn2hDGglgm2p3YmtLSwdB04t89/1O/w1cDnyilFU=' |
7 | -//module - 함수 전달 | 7 | +const FOODAPI_URL = 'http://apis.data.go.kr/1470000/FoodAdtvInfoService/getFoodAdtvInfoList' |
8 | -const md = require("./moduleEx2"); | 8 | +const FOODAPI_KEY = 'ofY2ppOq5kBqT5jYPaGsW%2BEy7OR5a1bf5Z9PHvqNKvwO5DSCaU2x2qCj%2FoXnuB1YVbMTlErkHWSMEsR5b7isrw%3D%3D'; |
9 | +var queryParams = '?' + encodeURIComponent('ServiceKey') + '=' +key; | ||
10 | +//queryParams += '&' + encodeURIComponent('prdlst_cd') + '=' + encodeURIComponent('C0118010300000'); | ||
11 | +queryParams += '&' + encodeURIComponent('pc_kor_nm') + '=' + encodeURIComponent('과.채음료'); | ||
12 | +//queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('3'); | ||
13 | +//queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('100'); | ||
14 | +const fs = require('fs'); | ||
15 | +const path = require('path'); | ||
16 | +const HTTPS = require('https'); | ||
17 | +const domain = "foodbot2020.ml" | ||
18 | +const sslport = 23023; | ||
19 | +const bodyParser = require('body-parser'); | ||
20 | +var app = express(); | ||
21 | +app.use(bodyParser.json()); | ||
22 | +app.post('/hook', function (req, res) { | ||
9 | 23 | ||
10 | -const app = express(); | 24 | + var eventObj = req.body.events[0]; |
25 | + var source = eventObj.source; | ||
26 | + var message = eventObj.message; | ||
11 | 27 | ||
12 | -app.set('port',process.env.PORT||3000); | 28 | + // request log |
29 | + console.log('======================', new Date() ,'======================'); | ||
30 | + console.log('[request]', req.body); | ||
31 | + console.log('[request source] ', eventObj.source); | ||
32 | + console.log('[request message]', eventObj.message); | ||
13 | 33 | ||
14 | -app.get('/',(req,res)=>{ | 34 | + getfoodinfo(eventObj.replyToken, eventObj.message.text); // eventObj.message.text 로 pc_kor_nm 받기 |
15 | - // node js가 응답 | 35 | + |
16 | - //res.send("Food Adtv Info Service"); | ||
17 | 36 | ||
18 | - // HTML이 응답 | 37 | + res.sendStatus(200); |
19 | - res.sendFile(path.join(__dirname,'/main.html')); | ||
20 | }); | 38 | }); |
21 | 39 | ||
22 | -app.listen(app.get('port'),()=>{ | ||
23 | - console.log(app.get('port'),'번 포트에서 대기 중'); | ||
24 | -}); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
40 | +function getfoodinfo(replyToken, kor_name) { | ||
41 | + | ||
42 | + request.post( | ||
43 | + { | ||
44 | + url: FOODAPI_URL + queryParams, | ||
45 | + },(error, response, body) => { | ||
46 | + if(error){ | ||
47 | + console.log('에러입니다.') | ||
48 | + } | ||
49 | + else{ | ||
50 | + if(response.statusCode ==200) | ||
51 | + { | ||
52 | + var result =body; | ||
53 | + var xmltojson = convert.xml2json(result,{compact:true,spaces:4}); | ||
54 | + //console.log(xmltojson); | ||
55 | + var resObj = eval("("+xmltojson+")"); | ||
56 | + var resultItems = resObj.response.body.items; | ||
57 | + var responseMessage ='[ ' + resultItems.item[0].PC_KOR_NM._text + ' ]\n'; | ||
58 | + | ||
59 | + | ||
60 | + for(var i=0 ; i < resultItems.item.length; i ++) | ||
61 | + { | ||
62 | + var addictive = resultItems.item[i].T_KOR_NM._text; | ||
63 | + var specVal = resultItems.item[i].SPEC_VAL_SUMUP._text; | ||
64 | + responseMessage += addictive + ' : ' + specVal + '\n'; | ||
65 | + } | ||
66 | + console.log('[responese message]',responseMessage); | ||
67 | + | ||
68 | + request.post( | ||
69 | + { | ||
70 | + url: TARGET_URL, | ||
71 | + headers: { | ||
72 | + 'Authorization': `Bearer ${TOKEN}` | ||
73 | + }, | ||
74 | + json: { | ||
75 | + "replyToken":replyToken, | ||
76 | + "messages":[ | ||
77 | + { | ||
78 | + "type":"text", | ||
79 | + "text":responseMessage | ||
80 | + } | ||
81 | + ] | ||
82 | + } | ||
83 | + },(error, response, body) => { | ||
84 | + console.log(body) | ||
85 | + }); | ||
86 | + } | ||
87 | + } | ||
88 | + }); | ||
89 | + | ||
90 | +} | ||
91 | + | ||
92 | +try { | ||
93 | + const option = { | ||
94 | + ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'), | ||
95 | + key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(), | ||
96 | + cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(), | ||
97 | + }; | ||
98 | + | ||
99 | + HTTPS.createServer(option, app).listen(sslport, () => { | ||
100 | + console.log(`[HTTPS] Server is started on port ${sslport}`); | ||
101 | + }); | ||
102 | + } catch (error) { | ||
103 | + console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); | ||
104 | + console.log(error); | ||
105 | + } | ||
106 | + | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -8,9 +8,9 @@ var url = 'http://apis.data.go.kr/1470000/FoodAdtvInfoService/getFoodAdtvInfoLis | ... | @@ -8,9 +8,9 @@ var url = 'http://apis.data.go.kr/1470000/FoodAdtvInfoService/getFoodAdtvInfoLis |
8 | var key ='ofY2ppOq5kBqT5jYPaGsW%2BEy7OR5a1bf5Z9PHvqNKvwO5DSCaU2x2qCj%2FoXnuB1YVbMTlErkHWSMEsR5b7isrw%3D%3D'; | 8 | var key ='ofY2ppOq5kBqT5jYPaGsW%2BEy7OR5a1bf5Z9PHvqNKvwO5DSCaU2x2qCj%2FoXnuB1YVbMTlErkHWSMEsR5b7isrw%3D%3D'; |
9 | var queryParams = '?' + encodeURIComponent('ServiceKey') + '=' +key; | 9 | var queryParams = '?' + encodeURIComponent('ServiceKey') + '=' +key; |
10 | //queryParams += '&' + encodeURIComponent('prdlst_cd') + '=' + encodeURIComponent('C0118010300000'); | 10 | //queryParams += '&' + encodeURIComponent('prdlst_cd') + '=' + encodeURIComponent('C0118010300000'); |
11 | -//queryParams += '&' + encodeURIComponent('pc_kor_nm') + '=' + encodeURIComponent('과.채음료'); | 11 | +queryParams += '&' + encodeURIComponent('pc_kor_nm') + '=' + encodeURIComponent('스위트초콜릿'); |
12 | //queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('3'); | 12 | //queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('3'); |
13 | -queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('100'); | 13 | +//queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('100'); |
14 | 14 | ||
15 | global.foods = new Array(); | 15 | global.foods = new Array(); |
16 | 16 | ||
... | @@ -23,32 +23,25 @@ request({ | ... | @@ -23,32 +23,25 @@ request({ |
23 | console.log('에러입니다.') | 23 | console.log('에러입니다.') |
24 | } | 24 | } |
25 | else{ | 25 | else{ |
26 | - if(response.statusCode ==200) | 26 | + if(response.statusCode ==200){ |
27 | var result =body; | 27 | var result =body; |
28 | var xmltojson = convert.xml2json(result,{compact:true,spaces:4}); | 28 | var xmltojson = convert.xml2json(result,{compact:true,spaces:4}); |
29 | //console.log(xmltojson); | 29 | //console.log(xmltojson); |
30 | var resObj = eval("("+xmltojson+")"); | 30 | var resObj = eval("("+xmltojson+")"); |
31 | - | 31 | + var resultItems = resObj.response.body.items; |
32 | - for(var i=0;i<100;i++){ | 32 | + console.log(xmltojson); |
33 | - function fo(){ | 33 | + var responseMessage ='[ ' + resultItems.item[0].PC_KOR_NM._text + ' ]\n'; |
34 | - foods.push(food); | 34 | + |
35 | - } | 35 | + |
36 | - function foo(){ | 36 | + for(var i=0 ; i < resultItems.item.length; i ++){ |
37 | - var food =resObj.response.body.items.item[i].PC_KOR_NM._text; | 37 | + var addictive = resultItems.item[i].T_KOR_NM._text; |
38 | - fo(); | 38 | + var specVal = resultItems.item[i].SPEC_VAL_SUMUP._text; |
39 | - } | 39 | + responseMessage += addictive + ' : ' + specVal + '\n'; |
40 | - var food = resObj.response.body.items.item[i].PC_KOR_NM._text; | ||
41 | - global.foods.push(food); | ||
42 | - //foods.food = resObj.response.body.items.item[i].PC_KOR_NM._text; | ||
43 | - //foods.push(resObj.response.body.items.item[i].PC_KOR_NM._text); | ||
44 | - //console.log(resObj.response.body.items.item[i].PC_KOR_NM._text); | ||
45 | } | 40 | } |
46 | - //console.log(xmltojson); | 41 | + console.log('[responese message]',responseMessage); |
47 | } | 42 | } |
43 | + } | ||
48 | //console.log('Status', response.statusCode); | 44 | //console.log('Status', response.statusCode); |
49 | //console.log('Headers', JSON.stringify(response.headers)); | 45 | //console.log('Headers', JSON.stringify(response.headers)); |
50 | //console.log('Reponse received', body); | 46 | //console.log('Reponse received', body); |
51 | - console.log(foods[99]); | ||
52 | }); | 47 | }); |
53 | - | ||
54 | -console.log(foods); | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment