Showing
1 changed file
with
38 additions
and
6 deletions
1 | const db_total = require('./db_total.js'); //DB 합침 | 1 | const db_total = require('./db_total.js'); //DB 합침 |
2 | const secret_key = require('../keys/api_option').key; | 2 | const secret_key = require('../keys/api_option').key; |
3 | const secret_key_traffic = require('../keys/api_option_traffic').key; | 3 | const secret_key_traffic = require('../keys/api_option_traffic').key; |
4 | +const secret_key_air = require('../keys/api_option_air').key; | ||
4 | 5 | ||
5 | const requesting = require('request'); | 6 | const requesting = require('request'); |
6 | 7 | ||
... | @@ -31,6 +32,7 @@ module.exports = (server, app) => { | ... | @@ -31,6 +32,7 @@ module.exports = (server, app) => { |
31 | let info = {} //;? | 32 | let info = {} //;? |
32 | 33 | ||
33 | let Current_TrafficAcc = {}; | 34 | let Current_TrafficAcc = {}; |
35 | + let Current_AirPollution = {}; | ||
34 | 36 | ||
35 | //API 호출_Weather | 37 | //API 호출_Weather |
36 | const req_API = (when, what) => { | 38 | const req_API = (when, what) => { |
... | @@ -80,6 +82,29 @@ module.exports = (server, app) => { | ... | @@ -80,6 +82,29 @@ module.exports = (server, app) => { |
80 | }) //Promise | 82 | }) //Promise |
81 | } | 83 | } |
82 | 84 | ||
85 | + //API 호출_Traffic | ||
86 | + const req_API_air = () => { | ||
87 | + //async await 사용하기 위하여 promise 사용 | ||
88 | + return new Promise((resolve, reject) => { | ||
89 | + requesting.get({ | ||
90 | + // api를 요청할 주소 -- 시크릿키,위도,경도 입력 | ||
91 | + url: `http://api.airvisual.com/v2/nearest_city?lat=${lat}&lon=${lon}&key=${secret_key_air}`, | ||
92 | + json: true | ||
93 | + }, | ||
94 | + //api에게 응답 받았을때 실행되는 callback function | ||
95 | + function (err, api_res, api_body) { | ||
96 | + //err 존재시 promise reject 호출 | ||
97 | + if (err) reject(err); | ||
98 | + | ||
99 | + // api의 response이 있을경우 promise resolve 호출 | ||
100 | + if (api_res) { | ||
101 | + console.log("calling air pollution api"); | ||
102 | + resolve(api_body); | ||
103 | + } | ||
104 | + }); | ||
105 | + }) //Promise | ||
106 | + } | ||
107 | + | ||
83 | const API_bundle = async () => { | 108 | const API_bundle = async () => { |
84 | try { | 109 | try { |
85 | var order = 0; | 110 | var order = 0; |
... | @@ -93,6 +118,7 @@ module.exports = (server, app) => { | ... | @@ -93,6 +118,7 @@ module.exports = (server, app) => { |
93 | Discomport_index = await req_API("index", "th"); //불쾌지수 | 118 | Discomport_index = await req_API("index", "th"); //불쾌지수 |
94 | Ultra_Violet_index = await req_API("index", "uv"); //자외선지수 | 119 | Ultra_Violet_index = await req_API("index", "uv"); //자외선지수 |
95 | Current_TrafficAcc = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg"); //cate1, cate2 | 120 | Current_TrafficAcc = await req_API_traffic("frequentzoneLg", "getRestFrequentzoneLg"); //cate1, cate2 |
121 | + Current_AirPollution = await req_API_air(); | ||
96 | order = 1; | 122 | order = 1; |
97 | break; | 123 | break; |
98 | case 1: | 124 | case 1: |
... | @@ -111,11 +137,15 @@ module.exports = (server, app) => { | ... | @@ -111,11 +137,15 @@ module.exports = (server, app) => { |
111 | typhoon: Current_Weather.common.stormYn, //현재 태풍 | 137 | typhoon: Current_Weather.common.stormYn, //현재 태풍 |
112 | time: Current_Weather.weather.minutely[0].timeObservation, // 불러온 시각 | 138 | time: Current_Weather.weather.minutely[0].timeObservation, // 불러온 시각 |
113 | death_prob: 0, //확률 | 139 | death_prob: 0, //확률 |
140 | + | ||
114 | death_number: Current_TrafficAcc.items.item[0].dth_dnv_cnt, //사망자 수 | 141 | death_number: Current_TrafficAcc.items.item[0].dth_dnv_cnt, //사망자 수 |
115 | midhurt_number: Current_TrafficAcc.items.item[0].se_dnv_cnt, //중상자 수 | 142 | midhurt_number: Current_TrafficAcc.items.item[0].se_dnv_cnt, //중상자 수 |
116 | lighthurt_number: Current_TrafficAcc.items.item[0].sl_dnv_cnt, //경상자 수 | 143 | lighthurt_number: Current_TrafficAcc.items.item[0].sl_dnv_cnt, //경상자 수 |
117 | - occur_number: Current_TrafficAcc.items.item[0].occrrnc_cnt //발생건수 | 144 | + occur_number: Current_TrafficAcc.items.item[0].occrrnc_cnt, //발생건수 |
118 | - //"spot_cd": "11440001" | 145 | + |
146 | + airpollution: Current_AirPollution.data.current.pollution.aqius //대기질 지수 | ||
147 | + //aqi = 대기질 지수, aqius = us기준으로 산정, mainus:p2 미세먼지 기준 pm2.5 | ||
148 | + //0-50 좋음 //51-100 보통 // 101-150 나쁨 | ||
119 | } | 149 | } |
120 | console.log("API INFO \n", info); | 150 | console.log("API INFO \n", info); |
121 | 151 | ||
... | @@ -135,6 +165,7 @@ module.exports = (server, app) => { | ... | @@ -135,6 +165,7 @@ module.exports = (server, app) => { |
135 | (info.heat / 50) + (Math.abs(info.sensible_temperature - 15) / 10) + (info.discomport / 10) + (info.UV / 10) | 165 | (info.heat / 50) + (Math.abs(info.sensible_temperature - 15) / 10) + (info.discomport / 10) + (info.UV / 10) |
136 | + info.windspd * 1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) | 166 | + info.windspd * 1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) |
137 | + (info.death_number / 60) + (info.midhurt_number / 80) + (info.lighthurt_number / 90) + (info.occur_number / 90) | 167 | + (info.death_number / 60) + (info.midhurt_number / 80) + (info.lighthurt_number / 90) + (info.occur_number / 90) |
168 | + + (info.airpollution / 100) | ||
138 | ); | 169 | ); |
139 | 170 | ||
140 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보, 홈페이지 그래프에 나타날 정보 | 171 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보, 홈페이지 그래프에 나타날 정보 |
... | @@ -147,7 +178,8 @@ module.exports = (server, app) => { | ... | @@ -147,7 +178,8 @@ module.exports = (server, app) => { |
147 | trafficdeath: info.death_number, | 178 | trafficdeath: info.death_number, |
148 | mhurt: info.midhurt_number, | 179 | mhurt: info.midhurt_number, |
149 | lhurt: info.lighthurt_number, | 180 | lhurt: info.lighthurt_number, |
150 | - occurence: info.occur_number | 181 | + occurence: info.occur_number, |
182 | + pollution: info.airpollution | ||
151 | }; | 183 | }; |
152 | function getRandom_add_prob(min, max) { | 184 | function getRandom_add_prob(min, max) { |
153 | return Math.random() * (max - min) + min; | 185 | return Math.random() * (max - min) + min; |
... | @@ -173,12 +205,12 @@ module.exports = (server, app) => { | ... | @@ -173,12 +205,12 @@ module.exports = (server, app) => { |
173 | 205 | ||
174 | console.log("client send data \n", client_send) | 206 | console.log("client send data \n", client_send) |
175 | 207 | ||
176 | - app.get("socket").emit("weather_and_traffic_Info_minutely_send_to_client", client_send); // 클라이언트에게 정보 담아서 이벤트 발산 | 208 | + app.get("socket").emit("weather_traffic_air_Info_minutely_send_to_client", client_send); // 클라이언트에게 정보 담아서 이벤트 발산 |
177 | console.log("emit"); | 209 | console.log("emit"); |
178 | 210 | ||
179 | //db에 저장 | 211 | //db에 저장 |
180 | - sql = "INSERT INTO apisInfo (time,wind,temperature,rain,prob,tdeath,mhurt,lhurt,occurence) VALUES (?,?,?,?,?,?,?,?,?)"; | 212 | + sql = "INSERT INTO apisInfo (time,wind,temperature,rain,prob,tdeath,mhurt,lhurt,occurence,pollution) VALUES (?,?,?,?,?,?,?,?,?,?)"; |
181 | - db_total.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death, client_send.trafficdeath, client_send.mhurt, client_send.lhurt, client_send.occurence], (err, result) => { | 213 | + db_total.query(sql, [client_send.time, client_send.wind, client_send.temperature, client_send.rain, client_send.death, client_send.trafficdeath, client_send.mhurt, client_send.lhurt, client_send.occurence, client_send.pollution], (err, result) => { |
182 | if (err) console.log(err); | 214 | if (err) console.log(err); |
183 | }) | 215 | }) |
184 | order = 2; | 216 | order = 2; | ... | ... |
-
Please register or login to post a comment