Showing
3 changed files
with
40 additions
and
3 deletions
FatalTrafficAccidents_CodeList.xlsx
0 → 100644
No preview for this file type
| 1 | const db = require('./db.js'); | 1 | const db = require('./db.js'); |
| 2 | -const secret_key = require('../keys/api_option').key; | 2 | +const secret_key = require('../keys/api_option').weather_key; |
| 3 | +const traffic_key = require('../keys/api_option').traffic_key; | ||
| 3 | const requesting = require('request'); | 4 | const requesting = require('request'); |
| 4 | const lat = "37.239795"; | 5 | const lat = "37.239795"; |
| 5 | const lon = "127.083240"; | 6 | const lon = "127.083240"; |
| 7 | +const city = "1300"; | ||
| 8 | +const town = "1302"; | ||
| 9 | +const year_range = 6; | ||
| 10 | +const year_start = 2012; | ||
| 6 | module.exports = (server, app) => { | 11 | module.exports = (server, app) => { |
| 7 | 12 | ||
| 8 | const io = require('socket.io')(server, { | 13 | const io = require('socket.io')(server, { |
| ... | @@ -14,6 +19,7 @@ module.exports = (server, app) => { | ... | @@ -14,6 +19,7 @@ module.exports = (server, app) => { |
| 14 | let Heat_index = {}; | 19 | let Heat_index = {}; |
| 15 | let Discomport_index = {}; | 20 | let Discomport_index = {}; |
| 16 | let Ultra_Violet_index = {}; | 21 | let Ultra_Violet_index = {}; |
| 22 | + let Traffic_Accident = {}; | ||
| 17 | let sending_to_client_info = {}; | 23 | let sending_to_client_info = {}; |
| 18 | let client_send = {}; | 24 | let client_send = {}; |
| 19 | let client_name = ""; | 25 | let client_name = ""; |
| ... | @@ -44,6 +50,29 @@ module.exports = (server, app) => { | ... | @@ -44,6 +50,29 @@ module.exports = (server, app) => { |
| 44 | }); | 50 | }); |
| 45 | }) | 51 | }) |
| 46 | } | 52 | } |
| 53 | + | ||
| 54 | + // 교통사고정보를 받아오는 함수 | ||
| 55 | + const req_traffic_API = (year) => { | ||
| 56 | + //async await 사용하기 위하여 promise 사용 | ||
| 57 | + return new Promise((resolve, reject) => { | ||
| 58 | + requesting.get({ | ||
| 59 | + // api를 요청할 주소 -- 시크릿키,위도,경도 입력 | ||
| 60 | + url: `http://taas.koroad.or.kr/data/rest/accident/death?authKey=${traffic_key}&searchYear=${year}&siDo=${city}&guGun=${town}&type=json`, | ||
| 61 | + json: true | ||
| 62 | + }, | ||
| 63 | + //api에게 응답 받았을때 실행되는 callback function | ||
| 64 | + function (err, api_res, api_body) { | ||
| 65 | + //err 존재시 promise reject 호출 | ||
| 66 | + if (err) reject(err); | ||
| 67 | + | ||
| 68 | + // api의 response이 있을경우 promise resolve 호출 | ||
| 69 | + if (api_res) { | ||
| 70 | + console.log("calling traffic api"); | ||
| 71 | + resolve(api_body); | ||
| 72 | + } | ||
| 73 | + }); | ||
| 74 | + }) | ||
| 75 | + } | ||
| 47 | const API_bundle = async () => { | 76 | const API_bundle = async () => { |
| 48 | 77 | ||
| 49 | try { | 78 | try { |
| ... | @@ -53,6 +82,11 @@ module.exports = (server, app) => { | ... | @@ -53,6 +82,11 @@ module.exports = (server, app) => { |
| 53 | Discomport_index = await req_API("index", "th"); //불쾌지수 | 82 | Discomport_index = await req_API("index", "th"); //불쾌지수 |
| 54 | Ultra_Violet_index = await req_API("index", "uv"); //자외선지수 | 83 | Ultra_Violet_index = await req_API("index", "uv"); //자외선지수 |
| 55 | 84 | ||
| 85 | + // 사용자의 생일에 따라서 다른 년도의 교통사고정보를 가져옴. | ||
| 86 | + const year = year_start + (client_birth % (year_range+1)); | ||
| 87 | + Traffic_Accident = await req_traffic_API(year); //교통사고정보 | ||
| 88 | + | ||
| 89 | + | ||
| 56 | info = { | 90 | info = { |
| 57 | heat: Heat_index.weather.wIndex.heatIndex[0].current.index, //열지수 | 91 | heat: Heat_index.weather.wIndex.heatIndex[0].current.index, //열지수 |
| 58 | sensible_temperature: Sensible_T.weather.wIndex.wctIndex[0].current.index, //체감온도 | 92 | sensible_temperature: Sensible_T.weather.wIndex.wctIndex[0].current.index, //체감온도 |
| ... | @@ -66,9 +100,11 @@ module.exports = (server, app) => { | ... | @@ -66,9 +100,11 @@ module.exports = (server, app) => { |
| 66 | warning: Current_Weather.common.alertYn, //현재 특보 유무 | 100 | warning: Current_Weather.common.alertYn, //현재 특보 유무 |
| 67 | typhoon: Current_Weather.common.stormYn, //현재 태풍 | 101 | typhoon: Current_Weather.common.stormYn, //현재 태풍 |
| 68 | time: Current_Weather.weather.minutely[0].timeObservation, // 불러온 시각 | 102 | time: Current_Weather.weather.minutely[0].timeObservation, // 불러온 시각 |
| 103 | + traffic: Traffic_Accident.totalCount, // 교통사고 발생횟수 | ||
| 69 | death_prob: 0 //확률 | 104 | death_prob: 0 //확률 |
| 70 | } | 105 | } |
| 71 | console.log("API INFO \n", info); | 106 | console.log("API INFO \n", info); |
| 107 | + console.log("Traffic count:", info.traffic); | ||
| 72 | 108 | ||
| 73 | // ------------------------------ death_prob 정의 ------------------------------ | 109 | // ------------------------------ death_prob 정의 ------------------------------ |
| 74 | 110 | ||
| ... | @@ -84,7 +120,7 @@ module.exports = (server, app) => { | ... | @@ -84,7 +120,7 @@ module.exports = (server, app) => { |
| 84 | //죽을 확률 계산(내맘대로 커스텀) | 120 | //죽을 확률 계산(내맘대로 커스텀) |
| 85 | info.death_prob = ( | 121 | info.death_prob = ( |
| 86 | (info.heat / 50) + (Math.abs(info.sensible_temperature - 15) / 10) + (info.discomport / 10) + (info.UV / 10) | 122 | (info.heat / 50) + (Math.abs(info.sensible_temperature - 15) / 10) + (info.discomport / 10) + (info.UV / 10) |
| 87 | - + info.windspd*1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) | 123 | + + info.windspd*1 + (info.rain / 10) + (Math.abs(info.current_temperature - 15) / 10) + (info.traffic / 5) |
| 88 | ); | 124 | ); |
| 89 | 125 | ||
| 90 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보 | 126 | //이벤트 기반으로 일정 시간 간격으로 클라이언트에게 보낼 정보 | ... | ... |
| ... | @@ -66,7 +66,8 @@ router.get('/name/:name/birth/:birth', (req,res) => { | ... | @@ -66,7 +66,8 @@ router.get('/name/:name/birth/:birth', (req,res) => { |
| 66 | }); | 66 | }); |
| 67 | } | 67 | } |
| 68 | }); | 68 | }); |
| 69 | -} ) | 69 | +}); |
| 70 | + | ||
| 70 | router.get('/', function(req, res, next) { | 71 | router.get('/', function(req, res, next) { |
| 71 | res.render( 'main' ); | 72 | res.render( 'main' ); |
| 72 | }); | 73 | }); | ... | ... |
-
Please register or login to post a comment